Bonjour tout le monde, j'ai rencontré il y a peu un phénomène perturbant :
J'essaie de lire un fichier texte de 180 lignes avec la boucle suivante :
Le problème c'est que le programme se bloque avant la fin du programme (au bout de la 167ème ligne). Si je supprime cette 167ème ligne, il se bloque au bout de la 135ème... donc le programme ne se bloque pas parce que le code "bute" sur une ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 open (ECRITURE, "< $interfile") || die ("Can't open inter() file $interfile: $!."); open (SORTIE, "> $outputfile") || die ("Can't open input file $outputfile: $!."); while ($line = <ECRITURE>) { # INSTUCTIONS (reconnaissance de texte, substution, suppression de bouts # de $line, impression de nouvelles lignes, impression de $line) } close(ECRITURE); close (SORTIE);
Si le code à l'intérieur de la boucle est remplacé par "print $line;", le programme marche sans problème.
Si le fichier à lire est petit (10 lignes), le programme marche sans problème.
Encore plus étrange : Si je rajoute la ligne
au début de la boucle while, le programme ne se bloque plus... (même si le fichier dépasse les 500 lignes, avec les 180pareilles au début, il le lit toujours) mais ne lit qu'une ligne sur deux et en commenceant par la deuxième.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $line = <ECRITURE>
Si je rajoute deux de ces lignes dans la boucle while, le programme lit une ligne sur trois...
Quelqu'un peut-il m'expliquer ce qui se passe ?
Existe-t-il d'autres solutions pour lire un fichier texte ? (J'ai essayé le @ARGV et l'opérateur <>, c'est le même problème).
Merci beaucoup ! (J'ai mis le code complet en fichier joint si ca peut aider...)
Partager