Lire fichier texte ligne à ligne

Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006 - 17 mai 2006 à 09:02
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 - 21 mai 2006 à 22:41
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

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
17 mai 2006 à 11:58
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
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
17 mai 2006 à 11:59
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
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
17 mai 2006 à 12:26
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;
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
21 mai 2006 à 22:36
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.....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
21 mai 2006 à 22:41
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
0
Rejoignez-nous