Connaitre le nombres de lignes dans un fichier texte

Résolu
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006 - 19 mai 2006 à 11:01
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006 - 19 mai 2006 à 16:18
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

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
19 mai 2006 à 12:11
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
1
Utilisateur anonyme
19 mai 2006 à 11:12
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+
0
Utilisateur anonyme
19 mai 2006 à 11:16
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+
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
19 mai 2006 à 11:17
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
0

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

Posez votre question
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
19 mai 2006 à 11:17
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
0
Utilisateur anonyme
19 mai 2006 à 11:27
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à).
0
Utilisateur anonyme
19 mai 2006 à 11:29
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.
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
19 mai 2006 à 11:40
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
0
Utilisateur anonyme
19 mai 2006 à 14:45
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 @+
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
19 mai 2006 à 16:18
Merci beaucoup à tous pour vos solutions !
0
Rejoignez-nous