Bonjour,
Apres avoir lu le document perlintro, j'ai reussi a ecrire un programme en Perl qui reussi a trier les lignes contenues dans un fichier selon certains criteres et d'envoyer le resultat dans un autre fichier. Les lignes dans le fichier d'origine sont de la forme :
-rwxrwx--- 1 9200177 2007-12-08 17:37 e_can_lightfoot[1974]-if_you_could_read-[128].mp3
-rwxrwx--- 1 5445091 2007-12-08 17:37 e_can_streetheart[1900]-here_comes_the_night-[129].mp3
Il y a cependant un hic ... Lorsque Perl ecrit le resultat du tri dans le fichier de destination, le tri est bel et bien effectue mais il ecrit les resultats sur la meme ligne. Par exemple, dans le cas precedent, j'obtiens :
-rwxrwx--- 1 9200177 2007-12-08 17:37 e_can_lightfoot[1974]-if_you_could_read-[128].mp3-rwxrwx--- 1 5445091 2007-12-08 17:37 e_can_streetheart[1900]-here_comes_the_night-[129].mp3
Comment est-ce je que je pourrais obtenir un fichier comme l'original, i.e., avec saut de ligne?
Mon script est le suivant :
#!/usr/bin/perl
chdir ("/media/sda5/Informatique/Test");
open(OUTFILE, ">/media/sda5/Informatique/Test/contenu_musique_1.out") or die "Can't open file: $!";
open(INFILE, "contenu_musique.txt") or die "Can't open file: $!";
while(<INFILE>){
/^-(.*):\d{2}\s(\w)_(\w{3})_(\w*)\[(\d{4})\]-(\w*)-\[(\d{3})\]\.mp3$/;
chomp;
push @nontrie,[$_,$2,$3,$4,$5,$6,$7];
}
@trie = map {$_->[0] }
sort {
$a->[6] <=> $b->[6]
||
$a->[5] cmp $b->[5]
} @nontrie;
print OUTFILE @trie;
close INFILE;
J'ai essaye successivement les lignes :
push @nontrie,[$_,$2,$3,$4,$5,$6,$7,'\n'];
push @nontrie,[$_,$2,$3,$4,$5,$6,$7,"\n"];
mais sans succes.
Merci,
Configuration: Linux
Konqueror 3.5