![]() |
Delphi-Version: 2010
TStringList.CustomSort wird nicht angesprochen?
Hallo,
ich versuche eine TStringList mit einer eigenen Sortierung zu verarbeiten, leider wird die Function nicht angesprungen. Was hab ich vergessen? Auf...
Delphi-Quellcode:
...ist ein Breakepoint, der nicht auslöst.
...
ShowMessage('Sortiere...'); --- Gruß Frank
Delphi-Quellcode:
function ResultCustomCompare(List: TStringList; Index1, Index2: Integer): Integer;
var s1, s2: string; begin ShowMessage('Sortiere...'); s1 := GetStrFromColumn(3, List[index1]) + GetStrFromColumn(4, List[index1]); s2 := GetStrFromColumn(3, List[index2]) + GetStrFromColumn(4, List[index2]); if s1 < s2 then Result := -1 else if s1 > s2 then Result := 1 else Result := 0; end; procedure TfrmMain.LogClick(Sender: TObject); var strlResult: TStringList; begin strlResult := TStringList.Create; try strlResult.CustomSort(ResultCustomCompare); strlResult.Sorted := True; strlResult.LoadFromFile('data.txt'); ShowMessa(strlResult.Text); finally strlResult.Free; end; end; |
AW: TStringList.CustomSort wird nicht angesprochen?
// Calling Sort won't sort the list because CustomSort will
// only sort the list if it's not already sorted Setze Sorted nach dem TStringList.Create auf False? |
AW: TStringList.CustomSort wird nicht angesprochen?
Danke aber leider keinen Effekt...
|
AW: TStringList.CustomSort wird nicht angesprochen?
Delphi-Quellcode:
procedure TfrmMain.LogClick(Sender: TObject);
var strlResult: TStringList; begin strlResult := TStringList.Create; try strlResult.Sorted := false; // Erst die Datei laden strlResult.LoadFromFile('data.txt'); // dann sortieren. strlResult.CustomSort(ResultCustomCompare); ShowMessa(strlResult.Text); finally strlResult.Free; end; end; |
AW: TStringList.CustomSort wird nicht angesprochen?
DANKE - So geht's! :shock:
|
AW: TStringList.CustomSort wird nicht angesprochen?
Sorted immer auf False belassen. (Sortet braucht also garnicht benutzt/zugewiesen zu werden)
Sort und CustomSort sortieren "jetzt" und nur jetzt, bei diesem Aufruf. Das Sorted:=True anschließend nutzt die hauseigene Sort-Methode und "überschreibt" somit das was CustomSort gemacht hatte. Man könnte aber auch das
Delphi-Quellcode:
überchreiben und somit die "Standard"-Sortierung ändern, wenn man Sorted=True nutzen will, sowie diese Sortierung auch für Find und IndexOf.
function CompareStrings(const S1, S2: string): Integer; override;
|
AW: TStringList.CustomSort wird nicht angesprochen?
Danke Euch für die Erklärung!
Das bedeutet das die CustemSort Funktion NICHT mit der Classe der strlResult "verbunden" ist und selbstständig sortiert, sonder man immer den Aufruf für die Custom Sortierung machen muss. Das hatte ich anders angenommen aber das war mein Fehler. Ich dachte, man setzt Sorted auf Tru und sagt, sortiere aber damit... Gruß Frank |
AW: TStringList.CustomSort wird nicht angesprochen?
Wenn "Sortet" gesetzt ist, verwendet TStringList eine effizientere Methode bei der Suche nach vorhandenen Einträgen( "IndexOf()" ).
Diese Methode geht davon aus, dass die Elemente bereits auf Grundlage der eigenen Compare-Funktion sortiert sind. Es wird nicht jedes Element verglichen, sondern der Suchbereich mit Hilfe der Compare-Funktion schrittweise eingegrenzt. Das funktioniert auch, wenn die Compare-Funktion überschrieben wurde. Weil die externe Compare-Funktion nach dem "CustomSort" nicht mehr bereit steht, muss "Sortet" False bleiben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz