christoph: Dateizeiger an Stelle x setzen

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

  1. 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...

    1. Hi,

      Danke <<-- Ist auch ganz nett

      Danke

      ps. TSCULDIGUNG

      1. 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