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


Anmelden zum Antworten