AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TStringList.CustomSort wird nicht angesprochen?

TStringList.CustomSort wird nicht angesprochen?

Ein Thema von Schucki · begonnen am 28. Jul 2021 · letzter Beitrag vom 13. Aug 2021
Antwort Antwort
Schucki

Registriert seit: 17. Jul 2004
152 Beiträge
 
Delphi 2010 Architect
 
#1

TStringList.CustomSort wird nicht angesprochen?

  Alt 28. Jul 2021, 19:32
Delphi-Version: 2010
Hallo,

ich versuche eine TStringList mit einer eigenen Sortierung zu verarbeiten, leider wird die Function nicht angesprungen. Was hab ich vergessen?
Auf...
Delphi-Quellcode:
   ...
   ShowMessage('Sortiere...');
   ---
...ist ein Breakepoint, der nicht auslöst.

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;
Frank
  Mit Zitat antworten Zitat
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
112 Beiträge
 
Delphi 2010 Professional
 
#2

AW: TStringList.CustomSort wird nicht angesprochen?

  Alt 28. Jul 2021, 19:56
// 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?
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
152 Beiträge
 
Delphi 2010 Architect
 
#3

AW: TStringList.CustomSort wird nicht angesprochen?

  Alt 28. Jul 2021, 20:07
Danke aber leider keinen Effekt...
Frank
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.034 Beiträge
 
Delphi 7 Professional
 
#4

AW: TStringList.CustomSort wird nicht angesprochen?

  Alt 28. Jul 2021, 20:21
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;
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
152 Beiträge
 
Delphi 2010 Architect
 
#5

AW: TStringList.CustomSort wird nicht angesprochen?

  Alt 28. Jul 2021, 21:04
DANKE - So geht's!
Frank
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.409 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TStringList.CustomSort wird nicht angesprochen?

  Alt 28. Jul 2021, 21:57
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 function CompareStrings(const S1, S2: string): Integer; override; überchreiben und somit die "Standard"-Sortierung ändern, wenn man Sorted=True nutzen will, sowie diese Sortierung auch für Find und IndexOf.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (28. Jul 2021 um 22:03 Uhr)
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
152 Beiträge
 
Delphi 2010 Architect
 
#7

AW: TStringList.CustomSort wird nicht angesprochen?

  Alt 29. Jul 2021, 18:00
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
Frank
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.387 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TStringList.CustomSort wird nicht angesprochen?

  Alt 13. Aug 2021, 09:40
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf