Perl - Ecrire dans un fichier
Résolu
artagon7
Messages postés
417
Date d'inscription
Statut
Membre
Dernière intervention
-
artagon7 Messages postés 417 Date d'inscription Statut Membre Dernière intervention -
artagon7 Messages postés 417 Date d'inscription Statut Membre Dernière intervention -
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,
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,
A voir également:
- Perl - Ecrire dans un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
3 réponses
Salut,
voici quelques possibilités
voici quelques possibilités
print OUTFILE "$_\n" foreach @trie; print OUTFILE "$_\n" for @trie; print OUTFILE map { "$_\n"} @trie; { local $"="\n"; print OUTFILE "@trie\n"; }
Ou tu simplement tu enlève le chomp
Je l'ai mis en commentaire (voir en gras)
Je l'ai mis en commentaire (voir en gras)
#!/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; close OUTFILE;
Salut lami20j,
J'ai enleve la ligne chomp; la semaine derniere au cours de mes essais mais cela n'avait pas marche. Dans mon fichier de destination, il y avait parmi les 8 lignes que contient mon fichier deux lignes qui restaient toujours une a la suite de l'autre. J'avais abandonne cette facon.
Aujourd'hui, j'ai allume {toi, tu es paresseux ;-) moi je suis lent}. Je me suis apercu que le premier fichier implique parmi les deux correspondait a la derniere ligne de mon fichier source. Cette derniere ligne ne contenait pas de saut de ligne. J'ai donc ajoute un saut de ligne et tout est parfait. J'aurais du y penser avant... Je vais egalement garder les premieres suggestions que tu as emis au cas ou.
En ce qui concerne le tri de fichiers ca boucle la boucle. Ca devrait aller maintenant.
Donc, merci lami20j pour ton aide indispensable au cours de mon apprentissage de Perl concernant le tri de fichiers.
J'ai enleve la ligne chomp; la semaine derniere au cours de mes essais mais cela n'avait pas marche. Dans mon fichier de destination, il y avait parmi les 8 lignes que contient mon fichier deux lignes qui restaient toujours une a la suite de l'autre. J'avais abandonne cette facon.
Aujourd'hui, j'ai allume {toi, tu es paresseux ;-) moi je suis lent}. Je me suis apercu que le premier fichier implique parmi les deux correspondait a la derniere ligne de mon fichier source. Cette derniere ligne ne contenait pas de saut de ligne. J'ai donc ajoute un saut de ligne et tout est parfait. J'aurais du y penser avant... Je vais egalement garder les premieres suggestions que tu as emis au cas ou.
En ce qui concerne le tri de fichiers ca boucle la boucle. Ca devrait aller maintenant.
Donc, merci lami20j pour ton aide indispensable au cours de mon apprentissage de Perl concernant le tri de fichiers.