Connaitre le nombres de lignes dans un fichier texte [Résolu]

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


Je suis débutant en delphi, et voici le problème auquel je suis confronté:
Soit un document texte contenent plusieurs lignes.
je traite ces lignes une à une avec :
readln(Fichier_a_decrypter,ligne_to_read);//ma ligne est stockée dans ligne to read.

J'y opère un traitement, ensuite je passe à la ligne suivante, j'y opère le même traitement...etc... jusqu'a la fin du fichier ( je passe par une boucle, vous l'aurez compris !)

Je souhaiterais juste savoir commet récupérer le statut de la ligne a laquel je me trouve, c'est à dire, si je traite la 5eme ligne, comment le savoir ( en partant biensur du début du fichier texte)

Merci beaucoup à ceux qui m'aideront !!

Bonne journée

TanK

10 réponses

Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
42
Salut,


Si tu utilises une StringList pour charger ton fichier tout serait bien plus simple pour toi.



Var

  SL : TStringList;
  I : Integer;



Begin

   SL := TStringList.Create; // On la crée
   SL.LoadFromFile('Unit2.pas');  //On charge le fichier
   For I : = 0 To SL.Count - 1 do // count renvoie le nombres de ligne
     RichEdit1.Lines.Add(SL[I]);  // juste un petit exemple d'utilisation sans interêt
      // ici ton traitement par ligne l'accès à chaque ligne se fait par un index Ex. : SL[ I ]  
   SL.Free;  // et on libère
End;

pourquoi vouloir à tout prix utiliser les vieilles méthodes d'accès au fichier.
Dans l'exemple que j'ai donné tout est fait en 5 lignes de code, et si tu veux connaitre le nombre de ligne dans la StringList rien de plus simple  :   SL.Count   //renvoie le nombre de ligne 

@+
Cirec

Salut,

Je n'ai pas testé mais voici une source :

Procedure TForm1.Lecture;
Var
F: TextFile;
i : integer;
Lu : string;
begin
i:=0;
{$I-}
AssignFile(F,'Mon fichier');
Reset(F);
While not EOF(F) do
begin
ReadLn(F,Lu);
Inc(i);
end;
CloseFile(F);
{$I+}
end;

Voila
A+

Désolé, j'ai oublié l'essentiel lol. Après le Inc(i) tu peux mettre
ShowMessage(IntToStr(i)) ou Edit1.text:=IntToStr(i) (rajoute alors un petit sleep pour avoir le temps de voir changer le numéro de la ligne).

A+
Messages postés
106
Date d'inscription
lundi 4 août 2003
Statut
Membre
Dernière intervention
10 novembre 2006

merci beaucoup, mais comme je le disais je suis debutant, et l'orienté objet et moi.....N'y aurait -il pas plutot une fonction qui pourrais me renvoyer l'indice de la ligne ??

Encore merci !

Tank
Messages postés
106
Date d'inscription
lundi 4 août 2003
Statut
Membre
Dernière intervention
10 novembre 2006

Merci beaucoup, mais comme je le disais je suis debutant, et l'orienté objet et moi.....N'y aurait -il pas plutot une fonction qui pourrais me renvoyer l'indice de la ligne ??

Encore merci !

Tank

Bien c'est que je fais pas Inc(i) :

Je pose i=0. Puis à chaque fois que tu lis une ligne tu rajoutes +1 à i. Donc
si tu lis la première ligne tu as i=0
Si tu lis la deuxième ligne tu as i=1
Si tu lis la troisième ligne tu as i=2
Rajouter var i : integer; puis i:=0 puis Inc(i) n'alourdit pas vraiment ton code, tu ne penses pas ? Et puis ce n'est pas très compliqué, donc je vois pas en quoi cela pose problème mais bon ...

Pour répondre à ta question, le mieux est de regarder dans l'aide de Delphi (désolé je ne l'ai pas là).

A la place de i:=0; tu peux mettre i:=1; mais normalement en math le premier chiffre est zéro d'ou mon initialisation.
Messages postés
106
Date d'inscription
lundi 4 août 2003
Statut
Membre
Dernière intervention
10 novembre 2006

je comprend tout à fais, en fait, c'est l'initialisation d'un integer, avec une incrémentation à chaque lecture de nouvelle ligne. Le problème dans mon cas est que je possède une grosse fonction avec des fonctions imbriquée, et dans ce cas la, le problème serais de récupérée la valeur de i, a moins de passer par un pointeur peut etre, ce que je ne souhaite pas, n'étant pas très alaise avec ceci, et d'autant plus, vu mes fonctions imbriquée...Lol. N'existe il pas une fonction permettant de compter la ligne à laquelle je me trouve ( quelque chose style EOF, renvoyant un int correspondant à mon numéro de ligne ?)

Encore Merci

TanK

Désolé de ne pas avoir répondu plutot.


Cirec, ton idée est très bonne . je n'y avais pas pensé.


Pour revenir à toi Tank. Le fait d'utiliser Inc(i) ne complique en rien
ta source : la modification est à mon gout minime et bcp moins en tout
cas que si tu utilises un pointeur (et bonjour les beugs quand on est
pas à l'aise la dedans ). Question ressource memoire : la modification que j'ai proposé ne va pas faire exploser ton CPU t'inquete pas . En fait ca ne vas pas prendre grand chose en mémoire.


Bon @+
Messages postés
106
Date d'inscription
lundi 4 août 2003
Statut
Membre
Dernière intervention
10 novembre 2006

Merci beaucoup à tous pour vos solutions !