Eindimensionales Array sortieren

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Eindimensionales Array sortieren

    Hallo zusammen,

    ich habe eine Texdatei, deren Zeilen bei Programmstart in ein eindimensionales Array eingelesen werden.

    Die Zeilen beginnen jeweils mit der Angabe einer Woche/Jahr, also z. B. 01/2010, 02/2010, 03/2010 usw.

    Im Programmverlauf werden Änderungen an den Daten vorgenommen, wie z. B. neue Zeile einfügen, was aber nicht zwingend in chronologischer Reihenfolge vorgesehen ist. Vor dem Zurückspeichern als Textdatei lasse ich das Array daher mit Array.Sort(Arrayname) neu sortieren.

    Problem ist nun, dass beim Sortieren offensichtlich nur die ersten 3 Zeichen der Textzeilen berücksichtigt werden. Um bei o. g. Beispiel zu bleiben, wird bei Eingabe eines neuen Datensatzes für die zweite Woche des Jahres 2009 (02/2009) diese Zeile zwischen 01/2010 und 02/2010 einsortiert, anstatt diese an den Anfang zu stellen, wie es richtig wäre.

    Kann "Array.Sort" das grundsätzlich nicht, oder wie kann ich ggf. erreichen, dass neben der Wochenangabe auch die Jahreszahl für die Sortierfolge berücksichtigt wird?

    Vielen Dank im Voraus.

    Mike
    Hallo und erst mal Danke!


    das die Sortierung auch bis zur 5. Stelle noch richtig ist, hatte ich ursprünglich übersehen.

    Dein Beispiel würde ich aber trotzdem nur verstehen, wenn tatsächlich der String nach der 5. Stelle aufhören würde, aber dann steht an der 6. Stelle bei "01/2010" ja eine "1" und bei "02/2009" eine "0", so dass aufgrund dieser "0" ja das Jahr 2009 nicht nach dem Jahr 2010 einsortiert werden kann, sondern vor dem Jahr 2010 bei aufsteigender Reihenfolge einsortiert werden müsste.

    Oder ist es so, dass nach der 5. Stelle nicht mehr geprüft wird?


    Mike
    String Sortierung geht doch über die ASCII Tabell.
    Die 0 steht in der EDV immer vor der 9 !
    Dazu siehe dir mal eine ASCII Tabelle an. : Tabelle:

    Also entweder Splitten und dann als STring sortieren.
    oder Splitten in Datum wandeln und dann sortieren.

    Da wird dir leider nichts anders übrig bleiben


    Bernd
    Das bei Strings nach ASCII-Tabelle sortiert wird, ist ja eigentlich ganz logisch, war mir aber wohl in dem Augenblick gar nicht bewußt, weil ich nur die (rein optischen) Zahlen- bzw. Datumswerte betrachtet habe.

    Ich werde sicher eine andere Lösung finden.

    Vielen Dank nochmal!


    Mike

    VB.NET-Quellcode

    1. Public Class DateComparer
    2. Implements IComparer
    3. Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
    4. Dim d1 As Date
    5. Dim d2 As Date
    6. If TryParse(x,d1) AndAlso TryParse(y,d2) Then
    7. Dim rt As Integer = Date.Compare(d1,d2)
    8. Return IIf(rt>0,True,False)
    9. End If
    10. Return String.Compare(x,y)'wenn es kein Date ist nach String sortieren...
    11. End Function
    12. End Class


    aufruf geht dann ungefähr so:

    VB.NET-Quellcode

    1. Array.Sort(deinArray,New DateComparer())


    Mfg jvbsl
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---