AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringList CustomSort

Ein Thema von MicMic · begonnen am 10. Sep 2018 · letzter Beitrag vom 16. Sep 2018
Antwort Antwort
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#1

AW: StringList CustomSort

  Alt 11. Sep 2018, 07:42
Wenn ich für Index1 = 0 bei Result +1 und bei Index2 = 0 bei Result -1 angebe, gibt's ein Fehler "Listenindex außerhalb des gültigen Bereichs". Aber so wie oben geht es. Würde aber gerne wissen, warum andersrum ein Fehler kommt. Damit ich's halt verstehe mit diesem CustomSort.
Deine Sort1-Funktion ist ja nur die Vergleichsfunktion. Der Fehler dürfte aber in der eigentlichen Sortierfunktion geworfen werden, d.h. du müsstest dir diese mal im Konzert mit deiner Funktion anschauen, dann sollte es klar werden, denke ich.
Ralph
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: StringList CustomSort

  Alt 11. Sep 2018, 18:25
Wenn ich für Index1 = 0 bei Result +1 und bei Index2 = 0 bei Result -1 angebe, gibt's ein Fehler "Listenindex außerhalb des gültigen Bereichs". Aber so wie oben geht es. Würde aber gerne wissen, warum andersrum ein Fehler kommt. Damit ich's halt verstehe mit diesem CustomSort.
Deine Sort1-Funktion ist ja nur die Vergleichsfunktion. Der Fehler dürfte aber in der eigentlichen Sortierfunktion geworfen werden, d.h. du müsstest dir diese mal im Konzert mit deiner Funktion anschauen, dann sollte es klar werden, denke ich.
Bei "-AnsiCompareText(List[Index1],List[Index2])" hatte er den Fehler verursacht.

Ich habe jetzt jedenfalls gemerkt, dass in Index2 nie 0 ankommt, wenn zuvor "if Index1=0 then Result := -1;" angegeben wird. Also mit dieser einzigen Zeile scheint es zu gehen. Aber ich verstehe es noch nicht so ganz, da z.B. ein "if Index1=1 then Result := -1;" die Anwendung einfriert (Keine Rückmeldung). Das dürfte doch gar nicht passieren? Es kommt dann wohl mit "AnsiCompareText" in Konflikt. Die Funktion wird ja je nach Inhaltsgröße der StringList mehrmals aufgerufen.

Es geht jedenfalls so:
Code:
Function Sort1(List: TStringList; Index1, Index2: Integer): Integer;
Begin
 Result := 0;
 If Assigned(List) Then
 Begin
  If TMStringList(List).SortUp = 0
  Then Result := -AnsiCompareText(List[Index1],List[Index2])
  Else Result := AnsiCompareText(List[Index1],List[Index2])
 End;
 // hinzugefügt damit der erste Eintrag trotz CustomSort immer oben bleibt
 if Index1 = 0 then Result := -1;
End;
Aber ob's dann immer so passt? Die StringList hat ja nicht immer gleiche Inhalte. Und wie gesagt, prüfe ich "Index1 = 1" anstatt 0, macht die Anwendung Dauer-Urlaub.

@haentschman
Ich müsste wohl viel ändern im Source, wenn ich's in TList umbauen würde
Wollt das mit ner TStringList schon so behalten

Michael
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: StringList CustomSort

  Alt 12. Sep 2018, 11:23
Dann macht es halt der nächste und benötigt doppelt so lange - und ärgert sich dann über Dich.
Das Object zu nehmen war eine Notlösung als es noch keine Generics gab.
(und ich war schon so oft der "nächste)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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