Récupérer les dernieres lignes d'un fichier texte [Résolu]

Messages postés
15
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
15 février 2006
- - Dernière réponse : gg79
Messages postés
15
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
15 février 2006
- 8 févr. 2006 à 10:43
Bonjour tout le monde, je travaille sous delphi 6 ent (en novice). je dois travailler sur un fichier csv et récuperer les 20 dernieres lignes de ce fichier. En ce moment, j'utilise une liste chainees (pointeurs) pour stockés les infos du fichiers car je dois parcourir tout le fichiers (Tant que pas fin de fichiers), Y aurait-il une solution pour partir de la fin du fichier et ainsi reduire mon traitement. (Le fichier a 5000 lignes!!!).
Je vous en remercie d'avance et désolé pour le dérangement.
Viva Delphi
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
5
3
Merci
tu as plusieurs solution soit utiliser la méthode addobject;

soit utiliser une TList que est une liste de pointeurs ce qui dans ton
cas n'est pas une difficulté puisque tu utilise une liste chainé je te donne l'exemple delphi

type

PMyList = ^AList;

AList = record

champ1: string;

champ2: string;

end;



var



MyList: TList;

ARecord: PMyList;

B: Byte;

Y: Word;

comme pour le Tstringlist : MyList := TList.Create;

while not EOF(F) do

begin

New(ARecord);

//la tu charges l'enregistrement à partir du fichier

MyList.Add(ARecord); {Ajoute l'enregistrement à la liste}

end;

ensuite tu peux l'utiliser comme précédemment

var buffer:string;

for i:=Mylist.count-21 to Mylist.count-1 do

begin

Arecord:=Mylist.items[i];

buffer:=Arecord^.champ1; par exemple

// la tu mets ton traitement

end;

pour libérer la liste:

for B : = 0 to (MyList.Count - 1) do



begin

ARecord := MyList.Items[B];

Dispose(ARecord);

end;

MyList.Free;



comme tu peux le constater c'est une version évoluée des listes chainées



@+

jlen

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 132 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jlen100
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
5
0
Merci
salut utilises plutot une une Tstringlist. qui est plus simple à gérer qu'une liste chainée



declares une variable Tstring

var TempList: TStrings; { déclarer la liste }

dans le form create (par exemple ou quand tu as besoin de la liste) tu creés la liste



TempList := TStringList.Create; { construire l'objet liste }





dans ta procédure de lecture du fichier tu charges ta liste



tempList.LoadFromFile( 'Nom du fichier')





ensuite tu utilises ta liste pour cela tu as la propriété count
qui te donnes la longueur de la liste il suffit de donner
l'indice pour accéder à une chaine insi pour récupérer les 20 dernières
lignes:

var buffer:string;

for i:=Templist.count-21 to TempList.count-1 do

begin

buffer:=TempList[i];

// la tu mets ton traitement

end;



dans le onclose de la form (par exemple ou avant quand tu n'as plus besoin de la liste)

TempList.Free; { détruire l'objet liste }





@+

jlen
Commenter la réponse de jlen100
Messages postés
15
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
15 février 2006
0
Merci
A je ne connaissais pas la Tstringlist, je pourrais l'utiliser mais g plusieurs colonnes ds mon fichiers.
Est-ce possible avec la tsringlist?
Si oui comment faire?
Merci d'avance mais cest une piste a suivre!
Viva Delphi
Commenter la réponse de gg79
Messages postés
15
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
15 février 2006
0
Merci
Nikel Merci C'est 2 fois plus tranquille,
Pile poil pour mon appli, maintenant elle en jete
Je te remercierais jamais assez
Merci encore jlen100
@+
Commenter la réponse de gg79
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
5
0
Merci
si la réponse te convient n'oublie pas de cliquer sur réponse accepter
(cela facilite les recherches pour ceux qui auraient le même problème)



@+

jlen
Commenter la réponse de jlen100
Messages postés
15
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
15 février 2006
0
Merci
Ok merci
Commenter la réponse de gg79