Datei umschreiben - Zeilenverlust

Nils_13

Mitglied
Hi,

ich habe eine ganz simple Textdatei. Das kann ein Text sein, aber durchaus auch ein Quelltext. Diese Datei beinhaltet sozusagen den Kern, die wichtigsten Informationen stehen dort. Nun müssen aber zur weiteren Verarbeitung Zusatzinformationen, unbedingt in die ersten Zeilen der Datei gepackt werden. Das heißt, dass ich nun insgesamt drei Zeilen habe, die vor die Zeilen aus der Datei müssen und dann anschließend wieder in diese abgespeichert werden. Warum nicht einfach ein Beispiel:
Das ist die Ursprungsdatei:
Code:
a
b
c
d
e
f
g
Nun habe ich diese Informationen:
Code:
1
2
3
Die sollen davorgesetzt werden:
Code:
1
2
3
a
b
c
d
e
f
g
Nun habe ich aber das Problem, dass die erste Zeile der Grunddatei - in unserem Falle das "a" einfach verloren geht. Wirklich keine Spur mehr. Der Rest ist nach der Aktion immernoch vorhanden, nur diese eine erste Zeile des Inhalts fehlt einfach. An dem Beispiel von eben gezeigt, wäre das das Ergebnis:
Code:
1
2
3
b
c
d
e
f
g

Ich lese die Datei ein, setze die Zeilen davor, setze den Dateizeiger auf den Ursprung und schreibe dann alles via fwrite in die Datei. Habt Ihr eine Idee woran das liegen könnte ?
PHP:
$datei = fopen("data/".$dateiname, "r+");
$daten = fread($datei);
$daten = $highlighter."\r\n".$author."\r\n".$title."\r\n".$daten;
rewind($datei);
fwrite($datei, $daten);
fclose($datei);
 
Hi,

[phpf]fread[/phpf] erwartet einen zweiten Parameter length.

PHP:
$daten = fread($datei, filesize("data/".$dateiname));

Nimm doch einfach [phpf]file_get_contents[/phpf], wenn Du ja sowieso die ganze Datei einlesen musst.

LG
 
Wie kuddeldaddeldu schon schrieb, hilft die file_get_contents. Das liefert ein Array zurück.

Dann erzeugst du ein zweites Array:

PHP:
$meta = array('1', '2', '3');

Nun fügst du alles zusammen:

PHP:
$new_file_contents = array_merge($meta, $file_content);

Dies kannst du dann in die ursprüngliche Datei schreiben:

PHP:
file_put_contents("file.ext", $new_file_contents);
 
Hi, ah, vielen Dank. Tja, manchmal fehlt einem eben doch ein Parser. Bin eben hauptsächlich mit Object Pascal unterwegs und da arbeitet man mit dem Parser regelrecht zusammen, muss mich da wohl etwas umgewöhnen.
Edit: Also wäre das alles zuasmmengefasst so zu lösen ? Array wäre sowieso besser.
PHP:
$inhalt = file_get_contents("data/".$dateiname);
$meta = array($highlighter, $author, $title);
$ergebnis = array_merge($meta, $inhalt);
file_put_contents("data/".$dateiname, $ergebnis);
 
Zuletzt bearbeitet:
[phpf]file_get_contents[/phpf] liefert kein Array.

PHP:
$str = file_get_contents("die.eine");
$foo = file_get_contents("die.andere");
file_put_contents("neu.dat", $str . "\n" . $foo);

Oder mit fopen und a (append) arbeiten.
 
Hi,

Wie kuddeldaddeldu schon schrieb, hilft die file_get_contents. Das liefert ein Array zurück.

Quatsch. Das verwechselst Du mit [phpf]file[/phpf]. file_get_contents liefert den gesamten Dateiinhalt als String zurück.
Also kann man den neuen Inhalt wie gehabt per Stringkonkatenation zusammenfügen und per file_put_contents zurückschreiben.

LG
 
Hm, das hätte ich merken müssen, habe den Link wohl nur übermüdet durchgelesen und das nicht gemerkt, aber ist ja auch kein Problem, kommt vor. Dann ist das Thema an der Stelle erledigt. Danke für Eure Hilfe! Der Hinweis mit file_get_contents war sehr hilfreich, er komprimiert den Code um ein vielfaches.
 
Zurück