Extraire de variables d'un tableau et comparaison de variable
Noob_In_Perl
-
-
-
Bonjour,
débutant en perl, je ne parviens pas à trouver l' erreur.
Je dispose d'une tableau contenant des données : La première colonne contient le nom du champ (Ex : $ref_routeur->{feuillet}) et la deuxième sa valeur.
Je voudrai pouvoir effectuer sur ce tableau le traitement suivant :
1°) Me créer deux tableaux de chaine de caractère SiteA et SiteB que j' initialise en dur dans mon code Perl
2°) Lire une variable (my $Feuillet) issue de mon tableau de données
3°) Vérifier si cette variable (my $Feuillet) est présente dans l'un des tableau SiteA ou SiteB
En fonction du résultat, la variable my $Site aura une valeur différente (dans tout les cas également une chaine de caractère)
### Tableau des sites A ###
my @SitesA = (
"CD04K7S2B8",
"CD04KU7HG5"
);
### Tableau des sites B ###
my @SitesB = (
"CD04K7UFCC",
"CD15SDFRG5"
);
### Définition de la taille des tableaux ###
my $TabSizeA = @SitesA;
my $TabSizeB = @SitesB;
##########
# Script #
##########
my $Feuillet = $ref_routeur->{feuillet};
my $Site = $ref_routeur->{type_site};
for(my $i=0; $i<$TabSizeA; $i++)
{
if($Feuillet eq $SitesA[$i])
{
$Site = 'Site_Central';
$self->forceKey(-key=>"{type_site}");
}
}
for(my $i=0; $i<$TabSizeB; $i++)
{
if($Feuillet eq "$SitesB[$i]")
{
$Site = 'Site_Distant';
$self->forceKey(-key=>"{type_site}");
}
}
Merci d'avance
débutant en perl, je ne parviens pas à trouver l' erreur.
Je dispose d'une tableau contenant des données : La première colonne contient le nom du champ (Ex : $ref_routeur->{feuillet}) et la deuxième sa valeur.
Je voudrai pouvoir effectuer sur ce tableau le traitement suivant :
1°) Me créer deux tableaux de chaine de caractère SiteA et SiteB que j' initialise en dur dans mon code Perl
2°) Lire une variable (my $Feuillet) issue de mon tableau de données
3°) Vérifier si cette variable (my $Feuillet) est présente dans l'un des tableau SiteA ou SiteB
En fonction du résultat, la variable my $Site aura une valeur différente (dans tout les cas également une chaine de caractère)
### Tableau des sites A ###
my @SitesA = (
"CD04K7S2B8",
"CD04KU7HG5"
);
### Tableau des sites B ###
my @SitesB = (
"CD04K7UFCC",
"CD15SDFRG5"
);
### Définition de la taille des tableaux ###
my $TabSizeA = @SitesA;
my $TabSizeB = @SitesB;
##########
# Script #
##########
my $Feuillet = $ref_routeur->{feuillet};
my $Site = $ref_routeur->{type_site};
for(my $i=0; $i<$TabSizeA; $i++)
{
if($Feuillet eq $SitesA[$i])
{
$Site = 'Site_Central';
$self->forceKey(-key=>"{type_site}");
}
}
for(my $i=0; $i<$TabSizeB; $i++)
{
if($Feuillet eq "$SitesB[$i]")
{
$Site = 'Site_Distant';
$self->forceKey(-key=>"{type_site}");
}
}
Merci d'avance
A voir également:
- Perl tableau 2 dimensions
- Tableau word - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
2 réponses
Salut,
Tu n'as pas besoin de conserver la taille du array dans une variable, ni de faire un for.
Par ailleurs, je ne vois pas ce qu'est "forceKey" ni ce que tu fais avec ce qui matche.
Pour rechercher si un array contient une valeur, tu peux utiliser l'opérateur ~~ (https://perldoc.perl.org/perlfaq4#How-can-I-tell-whether-a-certain-element-is-contained-in-a-list-or-array%3f)
Dal
Tu n'as pas besoin de conserver la taille du array dans une variable, ni de faire un for.
Par ailleurs, je ne vois pas ce qu'est "forceKey" ni ce que tu fais avec ce qui matche.
Pour rechercher si un array contient une valeur, tu peux utiliser l'opérateur ~~ (https://perldoc.perl.org/perlfaq4#How-can-I-tell-whether-a-certain-element-is-contained-in-a-list-or-array%3f)
#!/usr/bin/perl use strict; use warnings; my @SitesA = ( "CD04K7S2B8", "CD04KU7HG5" ); my $Feuillet = "CD04K7S2B8"; if (/$Feuillet/ ~~ @SitesA) { print "Faire quelque chose avec $Feuillet"; }
Dal
Bonjour,
visiblement quelque chose manque encore car même avec ce script ne fonctionne pas.
En fait j' ai des données stocker dans un tableau
VARIABLE | VALEUR
|
$ref_routeur->{feuillet} | CD04K7S2B8
$ref_routeur->{fin_hostname} | tranche
$ref_routeur->{fonction_cpe} | ROUTEUR
$ref_routeur->{hostname} | teffaud-tranche
$ref_routeur->{type_site} | ""
Ce tableau permet d' alimenter une page Web qui est en fait un formulaire PERL
Certains champs sont en lecture seul (comme le champ correspondant à la variable $ref_routeur->{feuillet} et d' autres en lecture/ecriture comme le champ $ref_routeur->{type_site}.
Je souhaite crée un code perl, qui sera automatiquement exécuté lors de mon arrivée sur ce formulaire, ce script contiendra deux tableaux SitesA et SiteB écrit en dur dans mon script.
A mon arrivée sur la page web, le script dois comparer la variable $ref_routeur->{feuillet} de mon formulaire avec le contenu de mes deux tableaux.
Si la variable $ref_routeur->{feuillet} est stockée dans le tableau SiteA, la variable $ref_routeur->{type_site} prendra une valeur donnée. Si c'est dans le tableau Site B, la valeur alors affectée sera différente.
ensuite, le forcekey, ne servira qu'à "bloquer le champ en lecture seul" après affectation de la valeur
visiblement quelque chose manque encore car même avec ce script ne fonctionne pas.
En fait j' ai des données stocker dans un tableau
VARIABLE | VALEUR
|
$ref_routeur->{feuillet} | CD04K7S2B8
$ref_routeur->{fin_hostname} | tranche
$ref_routeur->{fonction_cpe} | ROUTEUR
$ref_routeur->{hostname} | teffaud-tranche
$ref_routeur->{type_site} | ""
Ce tableau permet d' alimenter une page Web qui est en fait un formulaire PERL
Certains champs sont en lecture seul (comme le champ correspondant à la variable $ref_routeur->{feuillet} et d' autres en lecture/ecriture comme le champ $ref_routeur->{type_site}.
Je souhaite crée un code perl, qui sera automatiquement exécuté lors de mon arrivée sur ce formulaire, ce script contiendra deux tableaux SitesA et SiteB écrit en dur dans mon script.
A mon arrivée sur la page web, le script dois comparer la variable $ref_routeur->{feuillet} de mon formulaire avec le contenu de mes deux tableaux.
Si la variable $ref_routeur->{feuillet} est stockée dans le tableau SiteA, la variable $ref_routeur->{type_site} prendra une valeur donnée. Si c'est dans le tableau Site B, la valeur alors affectée sera différente.
ensuite, le forcekey, ne servira qu'à "bloquer le champ en lecture seul" après affectation de la valeur