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
Jusque la tous ce passe bien et j'obtient le fichier semaine_1.txt trier dans l'ordre croissant pour la semaine 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 sub TRI { open F1,"$llgg1/fich1.txt" or die "E/S: $!\n"; open R1,">$llgg1/semaine_1.txt" or die "E/S: $!\n"; #Fichier FINAL while ($l = <F1>) { @CC = split(/\n/,$l); #push @TdT, [ @CC ]; push @TdT, [@CC]; } @tri = sort {$a->[2] cmp $b->[2]} @TdT; # tri selon le champ 2 print R1 "@$_\n" for @tri; close (F1);close (R1); }
Pour me faciliter la tache je mets une boucle For a ma fonction qui grace au scalaire $o me permait de traiter chaque semaine.
C'est la que je ne comprends plus rien le 1er sort bien mais les autres c’est la cata…
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 for($o = 1; $o <= 4; $o++) { &TRI(); } sub TRI { open F1,"$llgg1/fich$o.txt" or die "E/S: $!\n"; open R1,">$llgg1/semaine_$o.txt" or die "E/S: $!\n"; #Fichier FINAL while ($l = <F1>) { @CC = split(/\n/,$l); #push @TdT, [ @CC ]; push @TdT, [@CC]; } @tri = sort {$a->[2] cmp $b->[2]} @TdT; # tri selon le champ 2 print R1 "@$_\n" for @tri; close (F1);close (R1); }
$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
Partager