CustomSort
-
Hi
Ich habe ein Problem mit CustomSort. Ich möchte eine StringList sortieren die z.B. solche Inhalte hat:
03.06.2004 13:55:16 7 m
03.06.2004 13:55:16 3 d
03.06.2004 13:55:16 2 f
03.06.2004 13:55:16 5 vDie Einträge sollen nur nach Datum und Zeit sortiert werden (Wenn beides gleich ist muss es so bleiben wie es ist). Was danach steht soll ignoriert werden. Um das zu erreichen habe ich Substrings benutzt.
Was muss ich jetzt nach return schreiben damit die Liste sortiert wird (oder wie in diesem Fall nicht sortiert wird)?
Ich hoffe mir kann jemand helfen ..
sonnigen Gruß an alle
Nuro
-
Du musst halt statt der kompletten Items jeweils nur die Teil-Strings vergleichen. Beim Nachdenken über eine aussagekräftige(re) Überschrift hättest du eigentlich selbst darauf kommen müssen.
Das angepasste FAQ-Beispiel:
[cpp]int __fastcall SortBackwards(TStringList *list, int Item1, int Item2)
{
// das Minus sorgt dafür, dass das Vergleichsergebnis umgekehrt wird
return -CompareText(list->Strings[Item1].SubString(1, 19), list->Strings[Item2].SubString(1, 19));
}[/cpp]
-
erstmal danke für die Antwort.
Leider scheint das so nicht zu klappen.
So sieht das jetzt bei mir aus:
int __fastcall SortStrings( TStringList *List, int Index1, int Index2) { return CompareText(List->Strings[Index1].SubString(1, 19), List->Strings[Index2].SubString(1, 19)); }
Trotzdem wird der Inhalt der StringList immer nach dem gesamten String geordnet ausgegeben. Also zuerst 03.06.2004 13:55:16 2 f usw.
mit bitte um hilfe
Nuro
-
Hallo,
hier ein kleiner Erfahrungsbericht zum Sortieren einer StringList unter Vermeidung von Duplikaten und Groß-/Kleinschreibung.
Dank CustomSort werden auch a/ä, o/ö, u/ü streng sortiert (ohne CustomSort geht das zumindest bei mir wild durcheinander).slWorteGes->Sorted = true;
slWorteGes->Duplicates = false;
slWorteGes->CaseSensitive = false;// (...) Worte in Liste schreiben
slWorteGes->Sorted = false;
// ohne Wegnahme der Sortierung wurde die nachfolgende Anweisung nicht korrekt
// ausgeführtslWorteGes->CustomSort(SortForward); // Aufruf der Callback-Funktion
Hoffe das hilft.
Gruß
LeoJansen schrieb:
Du musst halt statt der kompletten Items jeweils nur die Teil-Strings vergleichen. Beim Nachdenken über eine aussagekräftige(re) Überschrift hättest du eigentlich selbst darauf kommen müssen.
Das angepasste FAQ-Beispiel:
[cpp]int __fastcall SortBackwards(TStringList *list, int Item1, int Item2)
{
// das Minus sorgt dafür, dass das Vergleichsergebnis umgekehrt wird
return -CompareText(list->Strings[Item1].SubString(1, 19), list->Strings[Item2].SubString(1, 19));
}[/cpp]