![]() |
StringList: Sortieren nach mehreren Kriterien
hi gemeinschaft,
ich habe folgendes problem: in einer StringList befindet sich der inhalt einer CSV-Datei. etwa so:
Code:
die einträge der StringList will ich jetzt alphabetisch nach mehreren feldern sortieren. (die CSV-datei stellt eine exportierte datenbank-tabelle dar. bestimmte felder sind die primärschlüssel, nach denen sortiert werden muss).
"Niederschlesien","Breslau","Glatz"
"Niederschlesien","Breslau","Neumarkt" "Niederschlesien","Breslau","Auras" "Niederschlesien","Breslau","Bernstadt" "Niederschlesien","Breslau","Breslau" wenn also die erste und die dritte spalte das kriterium sind, dann muss eben zuerst nach der ersten spalte alphabetisch sortiert werden und danach noch nach der dritten, wobei sich die reihenfolge der werte aus spalte nicht ändern darf. ich hoffe, ich konnte mein problem einigermaßen verständlich ausdrücken :oops: nunja, jedenfalls komme ich nicht weiter (CustomSort ist mir schon klar, nur auf die sortier-logik komme ich einfach nicht...) wäre schön, wenn mir jemand helfen könnte aenogym |
Re: StringList: Sortieren nach mehreren Kriterien
Die Sortierlogik ist doch eigentlich ganz einfach:
Seien W und U die Strings, die Du vergleichen willst. Seien W1,W2 und W3 die drei Wörter von W, sowie U1, U2 und U3 die drei Wörter von U.
Code:
Wenn W1<U1, dann 'W < U'
sonst wenn W1>U1, dann 'W > U' sonst wenn W2<U2, dann 'W < U' // W1 = U1, dann 1.Untersortierkriterium sonst wenn W2>U2, dann 'W > U' sonst wenn W3<U3, dann 'W < U' // W2 = U2, dann 2.Untersortierkriterium sonst wenn W3>U3, dann 'W > U' sonst 'W = U' // Jetzt sind W1=U1, W2=U2 und W3=U3, also W=U! |
Re: StringList: Sortieren nach mehreren Kriterien
hm stimmt. ich hatte nur angst, dass dadurch schon sortierte zeilen weider durcheinander geraten könnten...
aber danke dir. ich denke, jetzt bekomm ichs hin :) aeno |
Re: StringList: Sortieren nach mehreren Kriterien
Du erstellst eine 'totale Ordnung'. Da wird dann nichts durcheinander gebracht. Überlege mal, wie zwei Strings generell verglichen werden. Nicht Wort für Wort wie bei Dir, sondern Zeichen für Zeichen. Im Grunde genommen genau die gleiche Logik, nur als Schleife verpackt.
|
Re: StringList: Sortieren nach mehreren Kriterien
Ich gebe noch etwas ungetesteten Code dazu:
Delphi-Quellcode:
Grüße vom marabu
procedure CustomSort(sl: TStringList; sc: TStringListSortCompare; const ida: array of integer);
var s1, s2: TStrings; function SortCompare(List: TStringList; Index1, Index2: Integer): Integer; var i: Integer; begin s1.CommaText := sl[Index1]; s2.CommaText := sl[Index2]; for i := Low(ida) to High(ida) do begin Result := CompareText(s1[ida[i]], s2[ida[i]]); if Result <> 0 then Break; end; end; begin s1 := TStringList.Create; s2 := TStringList.Create; sl.CustomSort(sc); s1.Free; s2.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 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