Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 novembre 2006
-
19 mai 2006 à 11:01
Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 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)
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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
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;
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).
Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 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 ??
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à).
Tank01
Messages postés106Date d'inscriptionlundi 4 août 2003StatutMembreDernière intervention10 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 ?)
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.