ich habe eine Textdatei mit zwei Zeilen. Beide Zeilen wurden in die Datei mit einem \n am Ende geschrieben: fwrite($datei_zeiger,$text.„\n“);
Sieht dann also z.B. so aus:
abc
xyz
Weiterer Text würde nun in die nächste Zeile nach „xyz“ geschrieben usw. Wenn ich aber die Textdatei öffne, in die Zeile nach „xyz“ gehe und per „Backspace-Taste“ den Cursor eine Zeile höher hinter „z“ platziere, sieht die Sache anders aus.
Dann wird neuer Text direkt hinter „xyz“ geschrieben:
abc
xyzneu
Wie kann ich überprüfen, ob hinter „xyz“ ein /n existiert oder ob der Cursor am Anfang einer leeren Zeile steht?
Noch eine andere Frage:
feof soll ja eigentlich TRUE zurückgeben, wenn der Dateizeiger am Ende der Datei steht.
Wenn ich eine Datei mit der Methode a+ öffne, wodurch der Dateizeiger auf das Ende gesetzt wird, scheint das nicht zu klappen, oder verstehe ich das falsch?
\n ist ja nur ein UNIX-Zeilenumbruch. Somit kannst Du die Datei auch zeilenweise einlesen:
$datei = file("file.txt");
echo $datei[1];
Wenn Du die Datei selbst auf einem Windows-System öffnest könnte es passieren, dass dein Editor dort den UNIX-Zeilenumbruch nicht erkennt. Windows erwartet \r\n statt nur \n.
So ist es. Kommt Unix mit \r\n zurecht? Aus Gründen der Performance, wollte ich die Datei nicht - vor jedem Schreiben neuer Daten - zeilenweise einlesen. Einfach hinten dran in eine neue Zeile schreiben, nur eben mit Überprüfung, ob es auch die neue Zeile ist.
Wenn es nicht anders geht, werde ich deinen Vorschlag mal umsetzen.
Im Beispiel:
[php]
$datei_zeiger = fopen(„test.txt“,„a+“);
var_dump(feof($datei_zeiger));
[/php]erhalte ich bool(false) als Ausgabe. mode „a+“ sollte doch den Dateizeiger auf das Ende der zu öffnenden Datei positionieren. Dann müsste doch feof() eigentlich TRUE sein, oder?
Eine Ausgabe von:
[php]
$buffer = fgets($datei_zeiger);
echo $buffer;
[/php]gibt mir die erste und nicht die letzte Zeile aus. Wie kann ich denn den Dateizeiger noch an das Ende setzen und überprüfen? Oder gehe ich mit feof() falsch an die Sache ran?