Boucles imbriquées Perl
Ptesoleil
Messages postés
27
Date d'inscription
Statut
Membre
Dernière intervention
-
Ptesoleil Messages postés 27 Date d'inscription Statut Membre Dernière intervention -
Ptesoleil Messages postés 27 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un souci dans mon code Perl; j'utilise plusieurs boucle foreach imbriquées (certaines ouvrent des fichiers txt)
Voici mon code :
Foreach $line (@K) -- Parcours d'un tableau
if ($line =~ ...)
Foreach $... -- Parcours d'un hash
if ...
Foreach $data ... -- Parcours d'un fichier txt
if $data =~ ...
if (...)
Foreach ... -- Parcours d'un autre tableau d'un maximun de 4 lignes
(instructions)
Cependant lorsque j'execute il trouve la première condition de ma première boucle : execute toutes les instructions qui suivent mais ne continue plus à parcourir mon premier foreach et sort completement. J'ai essayé de rechercher du coté de next, last ou redo mais sans résultat.
Quelqu'un pourrait-il m'aider?
Merci.
J'ai un souci dans mon code Perl; j'utilise plusieurs boucle foreach imbriquées (certaines ouvrent des fichiers txt)
Voici mon code :
Foreach $line (@K) -- Parcours d'un tableau
if ($line =~ ...)
Foreach $... -- Parcours d'un hash
if ...
Foreach $data ... -- Parcours d'un fichier txt
if $data =~ ...
if (...)
Foreach ... -- Parcours d'un autre tableau d'un maximun de 4 lignes
(instructions)
Cependant lorsque j'execute il trouve la première condition de ma première boucle : execute toutes les instructions qui suivent mais ne continue plus à parcourir mon premier foreach et sort completement. J'ai essayé de rechercher du coté de next, last ou redo mais sans résultat.
Quelqu'un pourrait-il m'aider?
Merci.
A voir également:
- Boucles imbriquées Perl
- Denon perl pro test - Accueil - Audio
- Active perl - Télécharger - Édition & Programmation
- Excel fonction si et ou imbriquées - Guide
- Dessin anime cheveux bouclés - Forum Cinéma / Télé
- Perl exec - Forum Perl
5 réponses
Bonjour,
Là comme ça c'est pas évident de te répondre, ce qui est sur c'est qu'un simple if dans un foreach n'arretera jamais son exécution (sauf en cas de next / last / goto / return / etc...). Si tu pouvais mettre tout ton code (ou au moins la structure complète) ça serait déjà plus simple de voir ce qui ne va pas, parce que là y'a pas grand chose comme infos...
Essaye eventuellement de voir si le premier tableau que tu parcours contient bien plusieurs élements, on sait jamais^^
Là comme ça c'est pas évident de te répondre, ce qui est sur c'est qu'un simple if dans un foreach n'arretera jamais son exécution (sauf en cas de next / last / goto / return / etc...). Si tu pouvais mettre tout ton code (ou au moins la structure complète) ça serait déjà plus simple de voir ce qui ne va pas, parce que là y'a pas grand chose comme infos...
Essaye eventuellement de voir si le premier tableau que tu parcours contient bien plusieurs élements, on sait jamais^^
Voici mon code en entier :
Quand je parcours mon premier tableau y a bien tous les elements mais une fois que je rentre dans les boucles y a plus qu'une ligne (contenant les informations que je voulais mais ne parcours pas le reste des lignes du premier tableau donc il me manque des informations).
foreach $linekmtn (@$KMTN) { if ($linekmtn =~ /^\s\#(\d+)\#\s(\d.+)\s\{(\w.+)\}/) { $specie1 = $1; $val = $2; $compound = $3; foreach $k (sort keys %$SpecRef) { if ($specie1 eq $k) { foreach $data (@$allfile) { if ($data =~ m/(\d+\.\d+\.\d+\.\d+)\t(\w.+)\t(\w.+)\tc\t/i) { $valEC = $1; $NameReact = $2; $Equation = $3; if ($valEC eq $numEC) { chomp $data; $data =~(s/^\d+\.\d+\.\d+\.\d+\t\w.+\t\w.+\tc\t//gi); @t = split (/;/,$data); foreach my $ligne (@t) { chomp $ligne; ($shortC,$nameC,$formulaC) = split (/\t/,$ligne); print "$valEC\n"."ligne :$nameC / $compound \n"; if ($nameC eq $compound) { print FIL ("\n KM : $specie1 $compound$val"); } } } } } } } } }
Quand je parcours mon premier tableau y a bien tous les elements mais une fois que je rentre dans les boucles y a plus qu'une ligne (contenant les informations que je voulais mais ne parcours pas le reste des lignes du premier tableau donc il me manque des informations).
A priori je ne vois rien de choquant.
Question, tu utilises use strict; et use warnings; ? Si ce n'est pas le cas, il est possible que ton programme comporte un bug qui n'entraine pas d'affichage d'erreur, mais met un terme à l'exécution (mauvaise valeur dans une de tes variables par exemple).
Question, tu utilises use strict; et use warnings; ? Si ce n'est pas le cas, il est possible que ton programme comporte un bug qui n'entraine pas d'affichage d'erreur, mais met un terme à l'exécution (mauvaise valeur dans une de tes variables par exemple).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Biensur que j'utilise un use strict et use warnings mais il ne me signale pas d'erreur. J'ai ausssi déclarer mes tableaux pas de souci. En faite j'ai reglé mon probleme : j'ai utilisé next if au lieu de if. et comme je remplace mon debut de ligne "data" par rien : j'ai ajouté une autre variable $da2 pour que la valeur de $data soit gardée en memoire.
chomp $data;
$da2 = $data;
$da2 =~ (s/^\d+\.\d+\.\d+\.\d+\t\w.+\t\w.+\tc\t//gi);
@t = split (/;/,$da2);
Cependant comme avant j'avais mis un if je voulais aussi ajouté un elsif qui ne marche plus si je met next if - donc j'ai fermé le foreach et réouvert. Pas très propre mais ca marche .
Merci.
chomp $data;
$da2 = $data;
$da2 =~ (s/^\d+\.\d+\.\d+\.\d+\t\w.+\t\w.+\tc\t//gi);
@t = split (/;/,$da2);
Cependant comme avant j'avais mis un if je voulais aussi ajouté un elsif qui ne marche plus si je met next if - donc j'ai fermé le foreach et réouvert. Pas très propre mais ca marche .
Merci.