Domitz: txt Datei sortiert auslesen

Hallo, wie schaffe ich es, das ich eine txt Datei sortiert auslesen kann?

Ich erstelle ein Eingabeformular, wo die User ein bestimmtes Datum eingeben (nicht das aktuelle).
Anschließend sollen die Sätze nach den Daten ausgelesen werden.

Die .txt Datei sieht wie folgt aus:

20.01.2008|XY
19.01.2008|ZZ
22.01.2008|XX
18.12.2007|AA

Jetzt soll die Datei so sortiert werden, das das ganze wie folgt ausgegeben wird:

18.12.2007 AA
19.01.2008 ZZ
20.01.2008 XY
22.01.2008 XX

Ich hoffe ihr könnt mir weiterhelfen =)

  1. Hi,

    Hallo, wie schaffe ich es, das ich eine txt Datei sortiert auslesen kann?

    gar nicht. Die Datei wirst Du immer in der selben Reihenfolge auslesen. *Nachdem* Du dies getan hast, kannst Du die Daten in ein geeignetes Datenformat konvertieren[1] und sortieren.

    20.01.2008|XY

    Das Datum ist in extrem ungünstiger Form gespeichert. Lautete es "2008.01.20", könntest Du die Zeilen der Datei einfach als String sortieren. So jedoch ist eine Analyse absolut unumgänglich.

    Cheatah

    [1] Okay, die Konvertierung kann währenddessen geschehen.

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Die Dateneingabe wäre ja kein Problem.

      Soweit bin ich jetzt bei einer normalen Auslesung: (mit log Dateien, was aber eigentlich keinen Unterschied machen sollte)

      $beitraege = @file("datei.log");
      krsort($beitraege);

      foreach($beitraege as $ausgabe) {
        $ausgabe = stripslashes($ausgabe);
        $comment = explode("|",$ausgabe);

      echo "".$comment[0]." ".$comment[1]."";

      1. Hi,

        Die Dateneingabe wäre ja kein Problem.

        das ist fein. Und welches Problem hast Du nun noch?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          Die Dateneingabe wäre ja kein Problem.

          das ist fein. Und welches Problem hast Du nun noch?

          Cheatah

          Die Eingabe ist kein Problem, also das es dann so gespeichert wird:

          2008.01.20|XY

          Nur ich weiß leider nicht wie ich es schaffe, das sie sortiert ausgegeben werde.
          Blicke da leider nicht ganz durch.

          1. Hello,

            Die Eingabe ist kein Problem, also das es dann so gespeichert wird:

            2008.01.20|XY

            Nur ich weiß leider nicht wie ich es schaffe, das sie sortiert ausgegeben werde.

            Du liest die ganze Datei in den Speicher, in ein "Array".
            Das kannst Du dann mit sort() oder natsort() sortieren.
            Dass dabei dann über mehr als das Datum sortoert wird, ist eigentlich nicht wichtig.

            $_data = file($dateiname);
               sort($_data);

            $out = "<table>\r\n";

            foreach ($_data as $line)
               {
                  $out .= "    <tr>\r\n";
                  $_fields = explode('|',$line);
                  $out .= "        <td>{$_fields[0]}</td>\r\n";
                  $out .= "        <td>{$_fields[1]}</td>\r\n";
                  $out .= "    </r>\r\n";
               }

            $out .= "</table>\r\n";

            echo $out;

            Ein harzliches Glückauf

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
  2. Hello,

    Ich hoffe ihr könnt mir weiterhelfen =)

    Zu diesem Zweck sind Datentypen erfunden worden.
    Die Speicherung sollte immer in der für die Verarbeitung günstigsten Form stattfinden.
    Cheatah hat Dir ja schon gesagt, dass das Datum besser im ANSI-Format (oder einem verwandten) gespeichert werden sollte.

    Wie es dann angezeigt wird, ist eine ganz andere Baustelle.
    Du schreibst Dir dann einfach für jeden Datentyp eine Ausgabefunktion.

    Mit klassischen Textdateien ist das Sortieren eine aufwändige Sache, wenn nicht der ganze Dateiinhalt in den Speicher passt. Aber die haben wir ja heute auch nicht mehr nötig im Zeitalter der terabyte-Festplatten (1TB für 119,00 Euro habe ich letzte Woche angeboten bekommen). Da kannst Du auch Dateien mit wahlfreiem Zugriff aufbauen. PHP unterstützt das leider nur sehr schlecht, weil man nur sehr kompliziert eigene Datenstrukturen definieren und wieder auslesen kann

    http://de2.php.net/manual/de/function.pack.php
    http://de2.php.net/manual/de/function.unpack.php und

    es geht aber auch mit

    http://de2.php.net/manual/de/function.substr.php und
    <http://de2.php.net/manual/de/function.str-pad.php

    Datensätze in fester Satzlänge aufzubauen, sodass Du dann anschließend nicht mehr die gesamte Datei auslesen musst, wenn Du nur einen bestimmten Satz suchst.

    Für Deinen Fall empfehle ich Dir aber, Dich einfach mal mit serialize() und unserialize() zu beschäftigen.
    [link:http://de2.php.net/manual/de/function.serialize.php>

    Da kannst Du dann die Daten in einem "Array" speichern, dass Du komplett in der Datei abspeichern kannst. Und dass man in PHP "Arrays" sortieren kann, weißt Du ja schon.

    Wenn die zu erwartende Datenmenge aber über 500kB steigen wird, dann solltest Du besser gleich eine Datenbank verwenden, da das Arbeiten mit den Arrays (Datei jedes Mal vollständig auslesen und wieder wegschreiben) den Host sonst zu sehr belasten würde.

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de