Simple programme, simple bug - Perl - Programmation
Marsh Posté le 11-06-2013 à 20:20:09
Et une fois que le fichier est ouvert?
A+,
Marsh Posté le 11-06-2013 à 20:22:06
ReplyMarsh Posté le 11-06-2013 à 22:10:54
J'ai pas testé, mais a l'oeil nu, il y a trois erreurs:
Erreur pas grave mais qui va tout mettre sur une ligne
print MONFICHIER2 "$i $ligne/n";
c'est \n et non pas/n
erreur qui se répète avec MONFICHIER3
Erreur du copier-coller pas relu
open(MONFICHIER3,">/Translated/English.txt" );
$i=0;
while($ligne =<MONFICHIER> ){
chomp($ligne);
if ($ligne=~/FRENCH/){
$i++;
print MONFICHIER3 "$i $ligne/n";
}
}
c'est if ($ligne=~/ENGLISH/){
Et l'erreur la plus grave:
quand on a lu une première fois MONFICHIER, il faut revenir au début avant de le relire une seconde fois.
print" le nombre de lignes en français est $i";
open(MONFICHIER3,">/Translated/English.txt" );
ça devrait être
print" le nombre de lignes en français est $i";
seek(MONFICHIER, 0, SEEK_SET);
open(MONFICHIER3,">/Translated/English.txt" );
Et un truc qui n'est pas une erreur, mais sans doute un oubli:
print" le nombre de lignes en français est $i";
ce serait mieux comme
print" le nombre de lignes en français est $i\n";
A part ça, le reste devrait tenir la route.
Une dernière remarque:
faire
chomp($ligne); ou on vire le \n de la fin
puis
print MONFICHIER3 "$i $ligne/n"; ou on rajoute le \n supprimé
c'est du boulot inutile
while($ligne =<MONFICHIER> ){
if ($ligne=~/FRENCH/){
$i++;
print MONFICHIER3 "$i $ligne";
}
}
ça fait la même chose avec une ligne de moins.
Citation : Je sais que mon code est bien " primaire ", sans doute risible à vos yeux... |
La philosophie de perl, c'est que l'essentiel, c'est de pouvoir coder quelque chose qui soit une solution a son problème. Il n'y a pas LA solution a un pb en perl, mais tout un tas de solutions, selon son niveau, et qu'aucune n'est "risible", tant qu'elle marche.
Bon, j'aurais sans doute écrit ceci ainsi:
Code : |
A+,
Marsh Posté le 12-06-2013 à 19:13:33
Merci beaucoup ! C'est bon le programme marche, j'ai effectué les modifications indiquées. Il y avait une autre erreur qui était celui des chemins :
open(MONFICHIER,"Bilingual.txt" );
et non
open(MONFICHIER,"/translated/Bilingual.txt" );
Voilà mon code final réussi, et merci encore !
# ! /usr/bin/perl -w
open(MONFICHIER,"Bilingual.txt" );
open(MONFICHIER2,">>French.txt" );
$i=0;
while($ligne =<MONFICHIER> ){
chomp($ligne);
if ($ligne=~/FRENCH/){
$i++;
print MONFICHIER2 "$i $ligne\n";
}
}
print" le nombre de lignes en français est $i\n";
seek(MONFICHIER, 0, SEEK_SET);
open(MONFICHIER3,">>English.txt" );
$i=0;
while($ligne =<MONFICHIER> ){
chomp($ligne);
if ($ligne=~/ENGLISH/){
$i++;
print MONFICHIER3 "$i $ligne\n";
}
}
print" le nombre de lignes en anglais est $i\n";
<>;
close(MONFICHIER);
close(MONFICHIER2);
close(MONFICHIER3);
Marsh Posté le 11-06-2013 à 20:09:14
Bonjour,
Je suis une ignare totale, merci de votre tolérance.
Mon but est de faire un programme (très basique):
-ouvrir le fichier Bilingual.txt Ce fichier contient une liste de mots français avec leurs traductions en anglais écrit ainsi
FRENCH couette
ENGLISH quilt
FRENCH oreiller
ENGLISH pillow, etc.
-ranger les lignes commençant par FRENCH dans le fichier French.txt, et les lignes commençant par ENGLISH dans le fichier English.txt
-numéroter les lignes et afficher le nombre de lignes entrées
J'ai fait le code suivant, je pense que le problème doit provenir d'une erreur de chemin:
open(MONFICHIER,"/Translated/Bilingual.txt" );
open(MONFICHIER2,">/Translated/French.txt" );
$i=0;
while($ligne =<MONFICHIER> ){
chomp($ligne);
if ($ligne=~/FRENCH/){
$i++;
print MONFICHIER2 "$i $ligne/n";
}
}
print" le nombre de lignes en français est $i";
open(MONFICHIER3,">/Translated/English.txt" );
$i=0;
while($ligne =<MONFICHIER> ){
chomp($ligne);
if ($ligne=~/FRENCH/){
$i++;
print MONFICHIER3 "$i $ligne/n";
}
}
print" le nombre de lignes en anglais est $i";
close(MONFICHIER);
close(MONFICHIER2);
close(MONFICHIER3);
Je sais que mon code est bien " primaire ", sans doute risible à vos yeux... Mais je serais très reconnaissante si vous pouviez y accorder quelques instants pour repérer la source de mon erreur.
Merci par avance
Message édité par chimenseena le 11-06-2013 à 20:21:05