[PERL] boucle imbriquées

boucle imbriquées [PERL] - Perl - Programmation

Marsh Posté le 11-11-2008 à 15:35:49    

Salut à vous.
j'ai un ptit soucis:
j'ouvre 2 fichiers texte en lecture et je veux traiter chacune des paires de mots en les envoyant dans une fonction.
je fais donc un truc de la sorte:

Code :
  1. open(F1, 'f1.txt') || die "erreur douverture";
  2. open(F2, 'f2.txt') || die "erreur douverture";
  3. while (<F1> )
  4. {
  5.     while(<F2> )
  6.     {
  7.         fonction ($_,?????)    #  quoi mettre pour le 2eme argument?
  8.     }
  9. }


 
je récupère le première valeur avec $_ mais je ne sais pas comment récupérer la 2eme  [:at war with emo]


Message édité par x-ben le 11-11-2008 à 15:47:22
Reply

Marsh Posté le 11-11-2008 à 15:35:49   

Reply

Marsh Posté le 11-11-2008 à 15:43:43    

j'ai trouvé ça:

Code :
  1. open(F1, 'f1.txt') || die "erreur douverture";
  2. open(F2, 'f2.txt') || die "erreur douverture";
  3. while ($l1 = <F1> )
  4. {
  5.     while($l2 = <F2> )
  6.     {
  7.         fonction ($l1,$l2)
  8.     }
  9. }


 
prob: ça arrete de boucler a la fin de la premiere boucle  [:autobot]

Message cité 1 fois
Message édité par x-ben le 11-11-2008 à 15:46:28
Reply

Marsh Posté le 11-11-2008 à 16:10:53    

help, qqun saurait pkoi ça s'arrete à la fin de la première boucle?

Reply

Marsh Posté le 11-11-2008 à 22:36:27    

il s'arrêtera dès qu'il rencontrera la fin d'un des deux fichiers ...
 
Petite question, il y a combien de lignes dans les fichiers, et as-tu fait attention au caractère de séparation de ligne (variable $/) ?
 

Reply

Marsh Posté le 11-11-2008 à 23:00:30    

merci bien.
en fait, il faut refermer le fichier imbriqué pour que ça boucle.(sinon il ne lit qu'une fois)
une connerie de débutant    [:airforceone]

Reply

Marsh Posté le 13-11-2008 à 16:20:34    

x-ben a écrit :

j'ai trouvé ça:

Code :
  1. open(F1, 'f1.txt') || die "erreur douverture";
  2. open(F2, 'f2.txt') || die "erreur douverture";
  3. while ($l1 = <F1> )
  4. {
  5.     while($l2 = <F2> )
  6.     {
  7.         fonction ($l1,$l2)
  8.     }
  9. }


 
prob: ça arrete de boucler a la fin de la premiere boucle  [:autobot]


Faut revenir en debut de ton second fichier apres chaque tour de boucle interne.

Code :
  1. open(F1, 'f1.txt') || die "erreur douverture";
  2. open(F2, 'f2.txt') || die "erreur douverture";
  3. while ($l1 = <F1> )
  4. {
  5.     while($l2 = <F2> )
  6.     {
  7.         fonction ($l1,$l2)
  8.     }
  9.     seek(F2, 0, 0);
  10. }


A moins que ce que tu veuille faire soit:

Code :
  1. open(F1, 'f1.txt') || die "erreur douverture";
  2. open(F2, 'f2.txt') || die "erreur douverture";
  3. while (($l1 = <F1> ) and ($l2 = <F2> ))
  4. {
  5.         fonction ($l1,$l2)
  6. }


A+,


Message édité par gilou le 13-11-2008 à 16:23:43

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-11-2008 à 21:45:09    

je connais pas seek. j'ai mis close(F2) et ça marche.
mais sans doute que seek c'est plus approprié, je vais me enseigner sur la commande.
merci à toi Gilou

Reply

Marsh Posté le 15-11-2008 à 17:00:37    

seek( F, 0, 0) ca rembobine le fichier F au début sans le fermer justement.
Si tu passes par un close, alors le open correspondant doit être a l'interieur de la premiere boucle et non a l'exterieur.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed