Stefan: Wie kann ich sort einen Wert von hinten lesen lassen

Moin! Moin!

Ich komme mit meinem Programm nicht mehr weiter und bräuchte mal einen Denkanstoss.

Ich habe in einer Tabelle (15 Felder) pro Zeile ein Datum (Format:TT/MM/JJ, Feld:11).
In der Ausgabe möchte ich die einzelnen Zeilen so anordnen, daß immer der Datensatz zuerst angezeit wird, der dem heutigen Datum am nächsten kommt. Das Ganze habe ich hinbekommen, doch leider sortiert er mir das ganze jetzt von vorne beginnend, d.h. er sortiert erst nach Tag, bei gleichem Tag nach Monat, bei gleichem Monat nach Jahr (so: TT/MM/JJ). Ich möchte aber, daß er beim Vergleichen von hinten anfängt (das Feld von hinten einließt). Die Sortierung soll also so aussehen: JJ/MM/TT (Jahr, bei gleichem Jahr nach Monat, bei gleichem Monat nach Tag).

Wie kann ich das am einfachsten hinbekommen, ohne daß ich das Datumsformat in meiner Tabelle ändern muß? Gibt es dafür bei sort vielleicht einen bestimmten Parameter (sowas wie reverse für Felder).

Danke schon mal für Eure Hilfe und Anregungen.

Gruß

Stefan

  1. ...Nachtrag!!

    Diese (meine) Idee kann ja auch nicht werden. Wenn sort das Feld einfach nur von hinten ließt, dann kommt dabei ja logischer Weise auch nur Mist heraus.

    Ich werde wohl um das Splitten des Datum-Feldes nicht herumkommen.

    Falls jemand trozdem noch einen Vorschlag hat - immer her damit.

    Gruß

    Stefan

  2. Ebenfalls !

    Fast möchte ich sagen "Keine Details, wo liegt das Problem ?" ;-)

    Scherz beiseite, für ein paar Denkanstösse sollte es reichen:

    ...Tabelle ... Datensatz...

    klingt nach Datenbank (?) - die letzte DB die mir einfällt die Probleme hatte bei mehreren Jahren das Datum richtig zu sortieren war Superbase (ist schon einige Lichtjahre her). Ansonsten haben Datenbanken dieses 'Problem' nur wenn sie nicht im Datums- sondern im ASCII-Modus sortieren:
    1
    10
    100
    2
    3
    40 ... usw - kennt man ja

    ...sort...
    sh, bash oder perl ? (oder doch etwa ... ?) - läßt mich eher vermuten du hast die Daten irgendwo (z.B. in einer Logdatei) als Text 'herumliegen'. In diesem Fall fällt mir auch nichts anderes ein, als die Daten 'zu Fuss' zu sortieren.
    Möglichkeiten dazu wären:

    • das Datum aufsplitten, und dann zuerst nach Jahr, dann nach Monat und schliesslich Tag zu sortieren
    • das Datum in eine 'Zahl' konverieren (wenn du das Jahr aber tatsächlich nur zweistellig vorliegen hast müsstest du auch das noch umrechnen)
      01/01/00 -> 20000101
      02/01/00 -> 20000102
      24/12/01 -> 20011224 usw.
    • du änderst tatsächlich das Datumsformat. Allerdings bin ich mir nicht wirklich sicher ob das dann nicht wieder andere 'Nebenefekte' beim Sortieren hervorruft (siehe ASCII)

    Welche der vier von den drei Methoden :) du verwendest hängt jetzt eigentlich nur vom verwendeten Programm ab

    So, mehr 'stoßen' will ich jetzt aber nicht mehr, und 'denken' schon gar nicht ;-)

    ok, einen hab ich noch (es wird sowieso viel zu wenig Datenmüll erzeugt): der einzige switch für 'sort' der so etwas 'ähhhhnliches' macht wäre -r (reverse). Aber damit hättest du die Daten genauso falsch wie vorher sortiert, nur in umgekehrter Reihenfolge ;-)

    Nachdem ich mir jetzt genug Feinde geschaffen habe *g* mach ich jetzt aber wirklich Schluss

    MfG McNavc

    1. Hallo, McNavc!

      Zunächst die gute Nachricht: Ich habs schon selbst hingekriegt.

      ...sort...
      sh, bash oder perl ? (oder doch etwa ... ?) - läßt mich eher vermuten du hast die Daten irgendwo (z.B. in einer Logdatei) als Text 'herumliegen'. In diesem Fall fällt mir auch nichts anderes ein, als die Daten 'zu Fuss' zu sortieren.

      ...Perl - Die Daten liegen in einer ASCII-Datei, da mein Hoster (Strato) des öfteren Probleme mit MySQL hat.

      Möglichkeiten dazu wären:

      • das Datum aufsplitten, und dann zuerst nach Jahr, dann nach Monat und schliesslich Tag zu sortieren

      ...genauso hab ich es jetzt gemacht (gesplittet in $jahr, $monat und $tag)

      • das Datum in eine 'Zahl' konverieren (wenn du das Jahr aber tatsächlich nur zweistellig vorliegen hast müsstest du auch das noch umrechnen)
        01/01/00 -> 20000101
        02/01/00 -> 20000102
        24/12/01 -> 20011224 usw.

      ...das hatte ich schon erfolgreich erledigt, bevor mir mein Sortier-Problem aufgefallen ist.

      • du änderst tatsächlich das Datumsformat. Allerdings bin ich mir nicht wirklich sicher ob das dann nicht wieder andere 'Nebenefekte' beim Sortieren hervorruft (siehe ASCII)

      ...hinfällig

      So, mehr 'stoßen' will ich jetzt aber nicht mehr, und 'denken' schon gar nicht ;-)

      ...hätte ich's noch nicht hingekriegt währen das genau die Denkanstösse, die ich gebraucht hätte.

      ok, einen hab ich noch (es wird sowieso viel zu wenig Datenmüll erzeugt): der einzige switch für 'sort' der so etwas 'ähhhhnliches' macht wäre -r (reverse). Aber damit hättest du die Daten genauso falsch wie vorher sortiert, nur in umgekehrter Reihenfolge ;-)

      ...Genau. Das kam mir dann auch noch in den Sinn. Ich habs dann auch gleich noch als Antwort an meine Frage dran gehängt.

      Nachdem ich mir jetzt genug Feinde geschaffen habe *g* mach ich jetzt aber wirklich Schluss

      ...Trotzdem Danke für's Denken und Anstossen!!!

      Gruß

      Stefan