gg79
Messages postés15Date d'inscriptionlundi 21 février 2005StatutMembreDernière intervention15 février 2006
-
8 févr. 2006 à 08:58
gg79
Messages postés15Date d'inscriptionlundi 21 février 2005StatutMembreDernière intervention15 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
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201412 8 févr. 2006 à 10:00
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
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201412 8 févr. 2006 à 09:29
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)
gg79
Messages postés15Date d'inscriptionlundi 21 février 2005StatutMembreDernière intervention15 février 2006 8 févr. 2006 à 09:40
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