lecture ligne a ligne d'un gros fichier texte

lecture ligne a ligne d'un gros fichier texte - Delphi/Pascal - Programmation

Marsh Posté le 17-09-2003 à 17:12:28    

salut,
j'ai besoin de parcourir un gros fichier texte ligne a ligne pour y faire un traitement.
voici comment je m'y prend :

Code :
  1. procedure traitement();
  2. var
  3.   F: TextFile;
  4.   s: string;
  5. begin
  6.   AssignFile(F, FilenameEdit2.text );
  7.   Reset(F);
  8.   while (not eof(F)) do
  9.          begin
  10.          Readln(F, S);
  11.          showmessage(s);
  12.          end;
  13. end;


j'ai mis un showmessage pour voir si tout ce passait bien. il sera remplacé par le traitement d'une ligne.
 
j'ai lancé ce bout de code, et apres avoir attendu plusieurs minutes (!) j'ai un premier showmessage qui apparait qui semble contenir tout le fichier.
quel est la bonne maniere de parcourir un gros fichier texte ligne a ligne ?
merci
 
edit :
Il semblerait que le gros fichier viens d'un environnement UNIX, donc le saut de ligne est codé differement. j'imagine que readln ne sait pas gerer les 2, qq'un pour confirmer ? comment m'y prendre alors ?


Message édité par nico168 le 17-09-2003 à 17:19:52
Reply

Marsh Posté le 17-09-2003 à 17:12:28   

Reply

Marsh Posté le 17-09-2003 à 17:24:09    

bon, j'ai la confirmation que readln ne sais pas gerer les fin de ligne UNIX
 
http://www.delphifaq.com/fq/q1058.shtml
 
pour passer le probleme, ils utilises un Tstringlist qu'ils remplissent avec le contenu du fichier, mais je peut pas me permettre de mettre tout le fichier en ram, qq'un aurrai une solution ?

Reply

Marsh Posté le 17-09-2003 à 17:24:54    

Faut faire ça comme ça :

Code :
  1. for line in file("c:\\FichierTest.txt","r" ):
  2.     print line


 
Oups pardon, mauvais langage :D. Pourquoi tu n'utilises pas la commande Read plustot que ReadLn ? Ca me semble tordu comme comportement de redirigé l'entrée standard vers un fichier pour après le lire avec ReadLn.


Message édité par Kristoph le 17-09-2003 à 17:25:01
Reply

Marsh Posté le 17-09-2003 à 17:35:12    

ben, j'ai pas l'impression d'utiliser de redirection, readln semble etre fait pour lire des lignes dans un fichier, je comprend pas se que tu veux me dire.
sinon, j'ai utilisé un editeur binaire pour replacer les 0d par des 0d0a dans mon gros fichier.
c'est long et ca me plait pas trop car ca demande une intervention manuelle.
si personne n'a mieux, je m'en contenterais

Reply

Marsh Posté le 17-09-2003 à 17:59:36    

Kristoph a écrit :

Faut faire ça comme ça :

Code :
  1. for line in file("c:\\FichierTest.txt","r" ):
  2.     print line


 
Oups pardon, mauvais langage :D. Pourquoi tu n'utilises pas la commande Read plustot que ReadLn ? Ca me semble tordu comme comportement de redirigé l'entrée standard vers un fichier pour après le lire avec ReadLn.


 
Oups, tu as raison. J'ai fait l'erreur de faire confiance à ce qui avait écrit dans l'aide de Delphi : un joli paragraphe sur les stdin et stdout dans la page sur ReadLn que je me demande ce qu'il peut bien faire là.
 
Je ne peux donc pas t'aider du tout si ce n'est de te conseiller d'écrire ta propre fonction ReadLn qui ouvre le fichier en mode binaire et détecte d'elle même le format du fichier.
 
PS : Ils ont l'habitude de ce genre de bourdes : l'éditeur de Delphi supporte très très bien les fichier Unix, mais pas leur compilateur. Résultat, des erreurs imbitables alors que le fichier est parfais quand tu l'ouvre avec l'éditeur.

Reply

Marsh Posté le 18-09-2003 à 12:15:18    

si ca interesse qq'un, je me suis fait ca :

Code :
  1. function readlnUnix(var F : textfile):string;
  2. var
  3. ch : char;
  4. begin
  5. result:='';
  6. read(F,ch);
  7. while (not eof(F)) do
  8.   begin
  9.   if (ch=#10) then exit;
  10.   result:=result+ch;
  11.   read(F,ch);
  12.   end;
  13. end;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed