Probleme avec ma boucle for

snufx Messages postés 7 Statut Membre -  
snufx Messages postés 7 Statut Membre -
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

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);
        if (exists 
        #push @TdT, [ @CC ];
        push @TdT,  [@CC];
           }    
@tri = sort {$a->[2] cmp $b->[2]} @TdT;	# tri selon le champ 0
print R1 "@$_\n" for @tri;
close (F1);close (R1);
}

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.

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);
        if (exists 
        #push @TdT, [ @CC ];
        push @TdT,  [@CC];
           }    
@tri = sort {$a->[2] cmp $b->[2]} @TdT;	# tri selon le champ 0
print R1 "@$_\n" for @tri;
close (F1);close (R1);
}


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
A voir également:

2 réponses

Psyk974 Messages postés 559 Statut Membre 51
 
Salut,

Je ne comprend pas trop ton langage de programmation mais je pense que l'erreur doit venir d'une variable qui doit être réinitialisé à chaque début de boucle est ce que tu comprends ?

A quoi correspond @cc, @TdT, @tri ??
0
snufx Messages postés 7 Statut Membre
 
dsl la syntaxe
if (exists n'est pas a prendre en compte je l'ai mise par erreur alors que je fesait d autre test
0