Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1301 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  lecture ligne a ligne d'un gros fichier texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lecture ligne a ligne d'un gros fichier texte

n°516654
nico168
Posté le 17-09-2003 à 17:12:28  profilanswer
 

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
mood
Publicité
Posté le 17-09-2003 à 17:12:28  profilanswer
 

n°516662
nico168
Posté le 17-09-2003 à 17:24:09  profilanswer
 

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 ?

n°516663
Kristoph
Posté le 17-09-2003 à 17:24:54  profilanswer
 

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
n°516670
nico168
Posté le 17-09-2003 à 17:35:12  profilanswer
 

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

n°516698
Kristoph
Posté le 17-09-2003 à 17:59:36  profilanswer
 

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.

n°517000
nico168
Posté le 18-09-2003 à 12:15:18  profilanswer
 

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;


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  lecture ligne a ligne d'un gros fichier texte

 

Sujets relatifs
Editeur fichier PHP pour modif fichier d'un forummime_content_type, recup extention d'un fichier
[FLASH] pas urgent -- votre sharedobject et php. et fichier txt.[Win32]Comment retrouver l'icône associée à une extension de fichier ?
[sql - access] exporter un fichier txt dans access ?[PHP]1 ptit coup de main pour une insertion dans un fichier svp [OK]
lecture d'eeprom ( HELP)[PHP] Sauvegarder le résultat d'une requête dans un fichier excel ?
fichier xls[Java] Problème de classpath avec un fichier Jar
Plus de sujets relatifs à : lecture ligne a ligne d'un gros fichier texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR