[PERL]probleme avec boucle For

probleme avec boucle For [PERL] - Perl - Programmation

Marsh Posté le 14-02-2009 à 05:44:52    

Bonjour j'ai un soucis avec une boucle For
 
Mon soucis est que je possede plusieurs fichiers representant chaque semaine de l'annee dans lequel j’essai de faire un tri.
 
fich1 contenant
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,20 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,1 10,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,10 2,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
 
fich2 contenant
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,20 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,1 10,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,10 2,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
 
fich3 contenant
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,20 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,1 10,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,10 2,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
 

Code :
  1. sub TRI {
  2. open F1,"$llgg1/fich1.txt" or die "E/S: $!\n";
  3. open R1,">$llgg1/semaine_1.txt" or die "E/S: $!\n";  #Fichier FINAL
  4.     while ($l = <F1> ) {
  5.         @CC = split(/\n/,$l);
  6.        
  7.         #push @TdT, [ @CC ];
  8.         push @TdT,  [@CC];
  9.            }   
  10. @tri = sort {$a->[2] cmp $b->[2]} @TdT; # tri selon le champ 2
  11. print R1 "@$_\n" for @tri;
  12. close (F1);close (R1);
  13. }


Jusque la tous ce passe bien et j'obtient le fichier semaine_1.txt trier dans l'ordre croissant pour la semaine 1
Pour me faciliter la tache je mets une boucle For a ma fonction qui grace au scalaire $o me permait de traiter chaque semaine.

Code :
  1. for($o = 1; $o <= 4; $o++) {
  2. &TRI();
  3. }
  4. sub TRI {
  5. open F1,"$llgg1/fich$o.txt" or die "E/S: $!\n";
  6. open R1,">$llgg1/semaine_$o.txt" or die "E/S: $!\n";  #Fichier FINAL
  7.     while ($l = <F1> ) {
  8.         @CC = split(/\n/,$l);
  9.        
  10.         #push @TdT, [ @CC ];
  11.         push @TdT,  [@CC];
  12.            }   
  13. @tri = sort {$a->[2] cmp $b->[2]} @TdT; # tri selon le champ 2
  14. print R1 "@$_\n" for @tri;
  15. close (F1);close (R1);
  16. }


 
C'est la que je ne comprends plus rien le 1er sort bien mais les autres c’est la cata…
$llgg1/semaine_$1.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
 
mais les fichiers suivant :
$llgg1/semaine_$2.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
 
$llgg1/semaine_$3.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
 
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
 
 
Alors que le resultat attendu serait
$llgg1/semaine_$1.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
 
$llgg1/semaine_$2.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
 
$llgg1/semaine_$3.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
 
Pouvez vous m’aider je ne vois pas comment utiliser la boucle correctement


Message édité par snufx le 14-02-2009 à 11:33:01
Reply

Marsh Posté le 14-02-2009 à 05:44:52   

Reply

Marsh Posté le 14-02-2009 à 10:32:45    

#  while ($l = <F1> ) {
#         @CC = split(/\n/,$l);
 
 
=> y a rien a splitter, t'as lu qu'une ligne.
 
par contre, si tu splittais sur /,/ ...

Reply

Sujets relatifs:

Leave a Replay

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