Sortierung TStringList (mehrere Spalten)
-
Hallo zusammen
Ich suche gerade nach einer Möglichkeit, mehrere Stringlisten zu sortieren, konkret habe ich 4 Stringlisten als eine virtuelle Tabelle à la EXCEL. Wenn die sortierrelevante Spalte (z.B. Spalte 1) alphabetisch umsortiert wird, müssen sich die Zeilen der anderen Spalten mit verschieben.
Hat jmd ne Ahnung?
Grüsse JOJO
-
Hi...
Gibts in der sortierrelevanten Spalte doppelte Einträge? Also gibts Zeilen, in
denen 100%ig dasselbe steht?
Wenn nicht, könnte sowas in der Art funktionieren:// sagen wir mal, Spalte1 ist die sortirrelevante Spalte, und Spalte2 hat // diesselbe Anzahl von Zeilen und soll "mitsortiert" werden TStringList *Oldpositions = new TStringList(); // erstelle StringList, die // die alten Positionen // von Spalte1 enthalten soll TStringList *Sorted = new TStringList(); // erstelle StringList, die Spalte2 // (aber sortiert) enthalten soll Oldpositions->Assign(Spalte1); // vor der Sortierung alte Positionen speichern Spalte1->Sorted = true; // Spalte sortieren for (int a = 0; a < Spalte1->Count; a++) { Sorted->Add(""); // erstelle leere Einträge, sonst gibts } // später (glaube ich) Probleme for (int a = 0; a < Spalte2->Count; a++) // jede Zeile durchgehen { int Index = Spalte1->IndexOf(Oldposition->Strings[a]); // neuen Index holen Sorted->Strings[Index] = Spalte2->Strings[a]; // Zeile in neue Position übernehmen } Spalte2->Assign(Sorted); // geordnete Liste übernehmen delete Oldposition; // und weg mit den delete Sorted; // anderen beiden
Was weniger aufwendiges fällt mir jetzt nicht ein, aber vielleicht ist das ja
ein kleiner Gedankenstoß...
Vielleicht ist es aber auch vollkommener Schwachsinn...
Probiers mal aus und sag bescheid, obs geklappt hat...MFG Aoeke
[ Dieser Beitrag wurde am 05.04.2003 um 17:43 Uhr von Aoeke editiert. ]
-
Nimm doch fuer die Zeilen TList.
Fuer jede Zeile fuegst Du eine TStringList mit den 4 Spalteneintraegen ein.Ueber den Index von TList kommste an die Zeile, darin ueber Index der Stringliste an den 'Spalten'- Text!
Sortieren tust Du die 'Zeilen' der TList!
-
Danke ersma für die Antworten
@Aoeke: So ne Lösung in die Richtung hatte ich auch schon im Hinterkopf, allerdings hab ich mich (mit Verlaub
) gefragt, ob es nicht eine elegantere Lösung gibt... in den Stringlisten können eben auch 'gleiche' Einträge stehen, was die Sortierung über diesen Algorithmus nicht gerade *eindeutig* machen würde
@DerAltenburger: Das Problem ist, dass ich das ganze schon in Stringlisten habe und für diese Lösung das ganze erst in die entsprechende Form schieben und dann wieder zurückschieben müsste (sozusagen x/y Achse verdrehen ;)) Aber falls sich nichts anderes mehr ergibt
werde ich diesen Vorschlag beherzigen und in eine Funktion umsetzen...
Vielleicht gibt es noch weitere Vorschläge?
Gruss JOJO