datei zeilenweise von unten nach oben auslesen

scorpio-php

Mitglied
dass es in die andere richtung weiss ich, aber es dann auch möglich daten zeilenweise vom fuss der datei bis zum kopf zb. in ein array einzulesen?

falls das geht, könnte mir da jemand mal nen beispielcode posten?
wäre wirklich hilfreich! thx a lot!:)
 
php.net: fopen() und fread()

Den Beispielcode findest du dann bei der Doku der einzelnen Funktionen.
Erst öffnen dann lesen. Bei fread() einfach keine Länge angeben, dann liest er bis Zeilenende.
 
besten dank!

und noch eine frage:
ist es möglich mit einem array eine bestimmte zeile einer datei anzusteuern?

also nehmen wir an ich hab eine .txt-datei und möchte nun aus dieser nur die 3. zeile auslesen und in einem array speichern.
wie würde dafür der code aussehen?
 
Dann würde ich die Datei öffnen, mit ner for-Schleife von 0 bis < 3 laufen und nur wenn der Zähler 2 ist ins Array Speichern, nur wofür brauchst du bei einer Zeile noch ein Array?
Ansonsten ne Whileschleife bis feof() und nen Zähler einbauen und eben nur die Zeilen die dem bestimmten Zähler entsprechen rauslesen.

Was ist denn dein Ziel was du verfolgst?
 
ich versuche ein forensystem basierend auf php (ohne sql) zu coden. .txt-files ersetzen quasi die db und aus ihnen möchte ich eben gezielte informationen, die ich zeilenweise hineinschreiben lasse, auslesen. :)

dass es möglich ist weiss ich nur gibts ab und zu noch paar ungeklärte fragen, da ich noch ned so geübt im umgang mit php bin ^^

thx für deine hilfe
 
Direkt eine Zeile ansprechen:
PHP:
$zeilen = file('dateiname.txt');
echo $zeilen[0]; // Gibt die 1. Zeile aus
echo $zeilen[5]; // Gibt die 6. Zeile aus

Zeilen von unten nach oben durchlaufen:
PHP:
$zeilen = file('dateiname.txt');
for ($x = count($zeilen)-1; $x >= 0; $x--) {
  echo $zeilen[$x];
}

snuu
 
okay vielen dank

eine letzte frage:
ih hab jetzt eine datei, die ich zeilenweise in ein array speichern lasse. funktioniert alles bestens soweit doch nun will ich, dass nur die ersten 4 zeilen auf diese art gespeichert werden und ab der 5. soll dieses $array[4] für den rest der datei gelten. (also mehr wie 1 zeile)

wie stell ich das am besten an?
 
Darf man Fragen zu welchem Zweck?
Klingt irgendwie verkompliziert, zumal dir dann ja evtl die Zeileninformation verloren gehen.
Ansonsten würde ich es so machen bis Zeile 4 in das Array schreiben.
Dann ab Zeile 5 in ein neues Array schreiben bis Dateiende.
Dieses Array dann einfach an das erste Array anhängen.
So kannst du das später bei bedarf noch verwenden und findest es beim durchlaufen mittels is_array schnell wieder...
 
der zweck ist folgender:
in die ersten 4 zeilen werden mittels formular kleinere informationen geschrieben, ab der 5. dann setzt eine textarea ein, dessen zeilenanzahl natürlich je nach eingabe variiert.

ich bekomm das irgendwie ned geregelt.. könntest du mir vielleicht nen beispielcode posten, wie das ausschauen soll, wenn ein 2. array einsetzt und alles ab zeile 5-ende speichert?
 
Achso... hmm stimmt die Zeilenumbrüche kommen nur durch das \n.
D.h. du willst gar kein Array ab der 5. Zeile...sondern eigentlich einen String.
Einfacher wäre es für dich, wenn du vor dem Speichern der Formulardaten
nl2br() über den Inhalt der Textarea drüblaufen lässt. Dadurch werden \n s durch <br /> ersetzt (was du später wenn gewünscht ja problemlos zu einem \n umwandeln kannst, jedoch keine Zeilenumbrüche dadurch hast...) ansonsten

PHP:
$zeilen = file('dateiname.txt');
$daten = array();
//Zeilen 1-4 auslesen
for ($i=0; $i < 4; $i++) 
       $daten[] = $zeilen[$i];

//Nun den Rest auslesen und zum letzten Element anfügen:
for($i=4; $i < count($zeilen); $i++)
       $daten[4] .= $zeilen[$i];

Ändere möglichkeit wäre:

PHP:
//Auslesen und löschen
$zeilen = file('dateiname.txt');
$daten = array();
//Zeilen 1-4 auslesen
for ($i=0; $i < 4; $i++) 
{
  $daten[] = $zeilen[$i];
  unset($zeilen[$i]); //aktuelles Element löschen, ist ja schon gespeichert
}

//Nun den Rest als letztes Element anfügen:
$daten[4] = implode('',$zeilen);
 
Zurück