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

Tank01 106 Messages postés lundi 4 août 2003Date d'inscription 10 novembre 2006 Dernière intervention - 19 mai 2006 à 11:01 - Dernière réponse : Tank01 106 Messages postés lundi 4 août 2003Date d'inscription 10 novembre 2006 Dernière intervention
- 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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 19 mai 2006 à 12:11
3
Merci
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

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.