Dateizeiger an Stelle x setzen
christoph
- php
Ich habe eine Datei geöffnet und dann eine Zeile ausgelesen. Deren Wert vergrößere ich nun um 1 und möchte diesen wieder in diese Zeile speichern. Doch leider ist der Dateizeiger doch nun schon in der nächsten Zeile. Wie kann ich ihn wieder zurücksetzten???
Christoph
Hi <<-- Versuchs mal so
Ich habe eine Datei geöffnet und dann eine Zeile ausgelesen. Deren Wert vergrößere ich nun um 1 und möchte diesen wieder in diese Zeile speichern. Doch leider ist der Dateizeiger doch nun schon in der nächsten Zeile. Wie kann ich ihn wieder zurücksetzten???
rewind(); <<-- So gehts
Danke <<-- Ist auch ganz nett
Christoph
ebenfalls Christoph...
Hi,
Danke <<-- Ist auch ganz nett
Danke
ps. TSCULDIGUNG
Hi,
Danke <<-- Ist auch ganz nett
Danke
ps. TSCULDIGUNG
Hallo Leute,
so geht das aber nicht ... :-)
Muss hier leider Veto einlegen aber die Frage nicht tauschen:
Stellt Euch Dateien so vor, als wären sie Zeichen für Zeichen auf einem Tonband aufgezeichnet. So war's ja schließlich auch einmal. Wenn eine Zeile zuende ist, kommt gleich die nächste dahinter. Bei Textdateien kommt das Zeilenende-Zeichen dazwischen:
DOS/Windows : 0D0Ah = "Wagenrücklauf/Zeilenschaltung"
MAC : 0Dh = "Wagenrücklauf"
Linux/Unix : 0Ah = "Zeilenschaltung"
Wagenrücklauf/Zeilenschaltung = Carriage Return/Line Feed
Stammt noch aus der Fernschreiber-Zeit
Zurück zum Thema:
In einer Textdatei kann man (offiziell) nur vorwärts lesen. Das Ersetzen von Zeilen in Textdateien ist nicht zulässig.
Wenn man die Textdatei aber als sogenannte Datei mit wahlfreiem Zugriff eröffnet, dann kann man den Dateizeiger darin selbst bewegen. Das macht man bei PHP mit der Funktion
fseek($handle,$zeiger)
Mit der Funktion
ftell($handle)
kann man abfragen, wo der Dateizeiger aktuell steht.
Wenn Du in der Datei also Manipulationen durchführen willst, musst Du VOR DEM LESEN nachfragen, wo der Zeiger steht, ihn die in einer Variablen merken und hinterher wieder dorthin zurückkehren. Du solltest Dir auch merken, wo du gestanden hast, als Du aufgehört hast zu lesen. Denn bis genau eine Stelle vorher darfst (musst) Du nachher (nur) schreiben - inclusive Zeilenende-Zeichen.
Die Zeile MUSS wieder vollständig ausgefüllt werden, sonst bringst Du die Organisation der Textdatei durcheinander. Denk immer an das Tonband.
Wenn man derartige Manipulationen machen will, sollte man keine Textdateien benutzen, sondern FILES OF RECORD. Das sind Dateien mit wahlfreiem Zugriff, also binär geöffnete.
$dateihandle = fopen($dateipfadUndName,"br+");
Wenn Du die Datei so eröffnest, gehen alle Funktionen zum Auslesen nur noch ohne Berücksichtigung des Zeilenende-Zeichens, und die reinen Textdatei-Funktionen verweigern ganz ihren Dienst. Das Zeilenende-Zeichen ist nun ein ganz normales Zeichen und muss von Dir entsprechend berücksichtigt werden.
Mehr darüber bei Bedarf.
Liebe Grüße
Tom