Trier un fichier texte

cs_manudel Messages postés 63 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 7 mars 2005 - 15 mai 2002 à 17:20
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 - 15 mai 2002 à 23:16
Je dispose d'un fichier texte, composé de 2 champs séparés par un point virgule.

Je charge en mémoire ce fichier dans une TStringList.

Je veux faire un tri sur le 2ème champ.

Comment faire ? La méthode Sort ne permet pas de spécifier le champ sur lequel on se base pour faire le tri.

1 réponse

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
15 mai 2002 à 23:16
Le TSringList a aussi un tri personnalisé :

** Créer une fonction de tri suivant le modèle suivant :
Il faudra que tu adaptes cette fonction pour comparer les chaines sur le deuxième champ qu'elles contiennent. Attention si Index1=Index2, il faut absolument que la fonction retourne 0, sinon ça plante le programme.
Function MaFonctionDeTri(List: TStringList; Index1, Index2: Integer): Integer;
Var L1,L2:Integer;
Begin
L1:=Length(List[Index1]);
L2:=Length(List[Index2]);
// Ici on compare les longueurs, mais c'est juste pour exemple
If L1>L2 Then Result:=1
Else If L2>L1 Then Result:=-1
Else Result:=0;
End;

** Demander ensuite le tri du TStringList:
( ici on tri les lignes d'un memo mais toi tu peux utiliser directement le StringList que tu as créé )
procedure TForm1.Button1Click(Sender: TObject);
Var Temp:TStringList;
begin
Temp:=TStringList.Create;
Try
// Sorted NE DOIT PAS être à TRUE !!!
Temp.Sorted:=False;
Temp.Assign(Memo1.Lines);
// Demande du tri perso
Temp.CustomSort(MaFonctionDeTri);
Memo1.Lines.Assign(Temp);
Finally
Temp.Free;
End;
end;

--- :sleepy) Nono du Moulin :sleepy) ---
0
Rejoignez-nous