Lire fichier texte ligne à ligne

Signaler
Messages postés
106
Date d'inscription
lundi 4 août 2003
Statut
Membre
Dernière intervention
10 novembre 2006
-
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
-
Bonjour,

Je suis débutant en delphi ( depuis trois jours :d ).
Je souhaiterais lire un fichier txt ligne a ligne et le stocker dans un string.
D'après ce que j'ai pu comprende, cela se passerais comme tel :
var:
F:TextFile;
ligne_to_read:string;

AssignFile(F,'c:\test.txt'); //----->ouverture d'un fichier .Txt
Reset(F); // ouverture en lecture

Procedure decrypte_file_and_affiche(fichier_a_decrypter:TextFile)

begin

Readln(F,ligne_to_read) // Si j'ai bien compris, la ligne est lue et est stockée dans "ligne_to_read".
//je souhaite ensuite "Tester" cette premiere ligne( En fait, si cette ligne contient le caractère ESC ( escape), je doi appliqué un traitement à cette ligne; Une fois le traitement réalisé ou si il n'y a pas la présence du caractère ESC, je doi continuer a boucler pour tout mon document Txt (2eme ligne, ensuite, trosieme ligne).

Ce n'est pas vraiment l'algo en lui même qui me fais peur car je code en C++ et en VB, mais plus la syntaxe delphi que je connais très peu , voila, si quelqu'un peut éclairer ma lanterne !!

Je vous remercie tous d'avance !!!

Bonne journée

Tank

5 réponses

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
salut,

tu peux utiliser le EOF-->

var fin:boolean;

const ESC:char=#27;


Fin:=false;

while Not Eof(F) and not Fin do

begin

    Readln(F,ligne_to_read);//on lit la ligne suivante

    if pos(ESC,ligne_to_read)<>0 then fin:=true;

end;


@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
salut,

tu peux utiliser le EOF-->

var fin:boolean;

const ESC:char=#27;


Fin:=false;

while Not Eof(F) and not Fin do

begin

    Readln(F,ligne_to_read);//on lit la ligne suivante

    if pos(ESC,ligne_to_read)<>0 then fin:=true;

end;


@+

jlen
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
33
var FSL : TStringList;
    N   : integer;
begin
    FSL := TStringList.Create;
    FSL.LoadFromFile('c:\test.txt');

    if FSL.Count <> 0 then begin
       for N := 0 to FSL.Count-1 do begin
           if Pos(#27, FSL.Strings[N]) <> 0 then begin

              ... traitement ...

              break;  // fin de la boucle FOR
           end;
       end;
    end;

    Memo1.Lines.Assign(FSL);
    FSL.Free;
end;
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
Precision importante : Si par le plus grand des hasard il venait a l'idée de qqun de vouloir supprimer une chaine de la liste (genre les chaines qui commencent par # dans une playlist par exemple), faut surtout pas le faire dans  une boucle for i:=0 to Count-1. C'est une tres mauvaise idée.....
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
dans ce cas il vaut mieux commencer par la fin :

for i:=count-1 downto 0 do

begin

traitement

end;

cela permet de supprimer des lignes sans avoir l'erreur d'exécution indice hors limite!!


@+

jlen