txt Datei sortiert auslesen
Domitz
- php
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 =)
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.
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]."";
Hi,
Die Dateneingabe wäre ja kein Problem.
das ist fein. Und welches Problem hast Du nun noch?
Cheatah
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.
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
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