OVH Cloud OVH Cloud

Lecture Fichier -> Arrêt à cause d'un caractére !

2 réponses
Avatar
Yoann Wyffels
Bonjour,

J'ai un fichier contenant du texte extrait d'une base (Lotus notes).
Lorsque je lis ce fichier (ave Open, ou Sysopen), la lecture s'arrête en
milieu de fichier à cause d'un caractére (un carré sous UltraEdit). Le code
Hexa de ce caractére est 1A.
Y-a-t'il une solution pour que Perl ne prenne pas ce caractére comme étant
la fin du fichier ? (Aucune erreur n'est detectée, il arrête vraiment la
lecture comme ci c'était la fin du fichier...:(

Voici les codes utilisés pour les tests de lecture:

============================
sysopen(FILE, "C:/temp.txt", 0);
while(<FILE>){
print "$_\n";
}
close(FILE);
=============================
open(FILE,"C:/temp.txt");
while(<FILE>){
print "$_\n";
}
close(FILE);
==============================
open(FILE,"C:/temp.txt");
@tab=<FILE>;
close(FILE);
==============================

Aucun n'est passé outre ce faux caractére de fin de fichier.

PS: Je suis sous ActivePerl 5.6.1 sous Windows XP.

Merci.
Yoann.


--

2 réponses

Avatar
Yoann Wyffels
J'ai trouvé une solution "temporaire" à ce problème, il suffit de lire le
fichier en mode binaire. Par contre, sur de gros fichiers, le mode binaire
est extrêmenent lent....

Code pour lire le fichier:
open(FILE,"temp.txt");
binmode(FILE);
while(<FILE>){

...
}
close(FILE);

"Yoann Wyffels" a écrit dans le message de
news:414747e8$0$17689$
Bonjour,

J'ai un fichier contenant du texte extrait d'une base (Lotus notes).
Lorsque je lis ce fichier (ave Open, ou Sysopen), la lecture s'arrête en
milieu de fichier à cause d'un caractére (un carré sous UltraEdit). Le
code

Hexa de ce caractére est 1A.
Y-a-t'il une solution pour que Perl ne prenne pas ce caractére comme étant
la fin du fichier ? (Aucune erreur n'est detectée, il arrête vraiment la
lecture comme ci c'était la fin du fichier...:(

Voici les codes utilisés pour les tests de lecture:

=========================== > sysopen(FILE, "C:/temp.txt", 0);
while(<FILE>){
print "$_n";
}
close(FILE);
============================ > open(FILE,"C:/temp.txt");
while(<FILE>){
print "$_n";
}
close(FILE);
============================= > open(FILE,"C:/temp.txt");
@tab=<FILE>;
close(FILE);
============================= >
Aucun n'est passé outre ce faux caractére de fin de fichier.

PS: Je suis sous ActivePerl 5.6.1 sous Windows XP.

Merci.
Yoann.


--





Avatar
Paul Gaborit
À (at) Tue, 14 Sep 2004 21:35:05 +0200,
"Yoann Wyffels" écrivait (wrote):
J'ai un fichier contenant du texte extrait d'une base (Lotus notes).
Lorsque je lis ce fichier (ave Open, ou Sysopen), la lecture s'arrête en
milieu de fichier à cause d'un caractére (un carré sous UltraEdit). Le code
Hexa de ce caractére est 1A.
Y-a-t'il une solution pour que Perl ne prenne pas ce caractére comme étant
la fin du fichier ? (Aucune erreur n'est detectée, il arrête vraiment la
lecture comme ci c'était la fin du fichier...:(
[...]


PS: Je suis sous ActivePerl 5.6.1 sous Windows XP.


Le caractère de code 1A correspond à Ctrl-Z qui sous Windows signifie 'fin de
fichier' (texte). D'ailleurs votre programme ne peut pas lire ce caractère. La
solution est d'ouvrir le fichier en mode binaire.

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>