Salut
J'essaye d'implémenter un tri personnalisé pour une liste de chaine de type xxx=yyy avec yyy est un nombre et c'est la clé du tri.
J'ai zieuter la fonction customcompare qui permet d'appeler une fonction utilisateur de tri :
procedure CustomSort(Compare: TStringListSortCompare); virtual;
j'ai donc créé une fonction de tri qui réponds a mes besoins ( voir compare2) et qui est censée etre appelée avec chaque élément de la chaine. Moi je dois retourner -1 ou 1 ou 0 selon le résultat du tri.
Par contre, ce n'est pas moi qui controle les appels a cette fonction sur chacun des éléments de la liste.
Voila le probleme, a l'execution j'ai un message d'erreur "index de liste hors limite (-1)"
Ca semble dire que la fonction est appelée avec des parametres faux ?
Comment faire pour indiquer au programme qu'il faut arreter le tri ?
EDIT : j'ai essayé de contourner le problème en testant les valeurs de index1 et index2, si < 0, je retourne 0. => dans ce cas, la fonction part en boucle infinie....
function compare2(List: TStringList; Index1, Index2: Integer): Integer;
var
ps, i: integer;
score1, score2: integer;
begin
ps := pos( '=', List[index1]);
score1 := strtoint( RightStr( List[index1], strlen( pchar(list[index1])) - ps ));
ps := pos( '=', List[index2]);
score2 := strtoint( RightStr( List[index2], strlen( pchar(list[index2])) - ps ));
if( score1 > score2 )
then result := -1
else result := 1;
end;
J'ai trouvé : il fallait ajouter un test pour renvoyer 0 en cas d'egalité et ca fonctionne....
Partager