TStringList sortieren



  • Hallo Gemeinde! :p

    ich brauche Hilfe!
    Ich habe eine TStringList in der die Daten(in diesem Fall Termine mit Datum) geordnet werden. Dies mache ich mit sort(). Danach geb ich die StringList wieder aus. Soweit alles ok und kein Problem. ABER wie kann ichs machen das er so sortiert, dass er nur die Zeilen wieder ausgiebt, die nach dem heutigen Datum liegen? Wenn ich das heutige Datum mit in die Liste schreibe, dann vergleicht er ja nur die Länge der einzelnen Strings in der Liste... und das is ja nicht die Lösung fürs Problem.

    DANKE für die Hilfe 😉



  • Hallo,

    verstehe ich es richtig, dass Du die StringList nur zum zweck des Sortierens benutzt?

    Ich würde für deine Termine eine Klasse anlegen mit den Elementen:

    class CTermin{
      String Beschreibung
      TDate Datum
      etc...
    }
    

    Dann einen Operatoren "<" und ">" (größer und kleiner), der zwei Objekte anhand des Datums vergleicht.

    Dann kannst du deinen Container, der die Termine verwaltet mittels einer eigenen Sort()-Funktion wesentlich flexibler sortieren. Wenn es nur wenige Termine sind reicht BubbleSort ansonsten eben QuickSort.

    Gruß

    Martin



  • Oder, um näher an dem Problem zu bleiben, von der TStringList vererben und die eigene Paint()-Methode neu aufsetzen.



  • Hallo

    TStringList hat doch keine Paint-Methode...

    Wenn ich dich richtig verstanden habe, sind die Einträge in der TStringList nach Datum sortiert. Also must du nur noch von "kleinsten" Datum aus suchen, wann das erste Datum gleich oder größer als das Suchkriterium ist. Dann kannst alle folgenden Einträge durchgehen und als Treffer verarbeiten. Und sei es, das du diese in eine neue TStringList kopierst.

    Wenn deine Liste doch nicht nach Datum sortiert ist, must du eben mit einer Schleife durchehen und bei jedem Eintrag einzeln das Datum prüfen.

    bis bald
    Stefan



  • Hallo,

    Warum nicht einfach einen Container der Standardbibliothek wie std::vector verwenden. sort erlaubt ja auch die Angabe einer Sortierfunktion (besser Functor).



  • akari schrieb:

    Hallo
    TStringList hat doch keine Paint-Methode...

    Da hast du natürlich recht. Ich war mental in einer ListBox. Verzeiht die vorweihnachtliche Stressverwirrung.

    Dennoch bleibe bei der Idee. Er will ja alle Daten haben, aber nur die nach dem heutigen Datum anliegenden anzeigen. Also würde ich von einer ListBox vererben und eine zusätzliche StringList (oder eben einen Vektor aus der STL) als weitere Eigenschaft (mit setter/getter) mit aufnehmen. Bei jedem onPaint der Listbox dann Datum auslesen und nur die betreffenden Stringlist-Einträge in die Listbox kopieren.

    Wenn weiteres Interesse besteht, würde ich das mal halbschnell runtertippen...


Anmelden zum Antworten