Andreas: Textdatei - bestimmte Zeile überschreiben?

Hallo,
wie kann ich ohne großen aufwand in einer Textdatei, nur eine bestimmte Zeile überschreiben?
Wenn möglich bitte an einem Beispiel beschreiben.

Andreas

  1. Hi,

    wie kann ich ohne großen aufwand in einer Textdatei, nur eine bestimmte Zeile überschreiben?

    nein. Dein Filesystem kann das nicht (es weiß nicht einmal, was eine Zeile ist), da kann Dir PHP auch nicht weiter helfen.

    Cheatah

    --
    X-Will-Answer-Email: No
    1. Hi Cheatah,

      nein. Dein Filesystem kann das nicht (es weiß nicht einmal, was eine Zeile ist), da kann Dir PHP auch nicht weiter helfen.

      Hm, bist du da sicher? Ich meine, dass man doch auch eine Datei zeilenweise auslesen kann oder? Wie sollte das dann gehen?

      Viele Grüße
      Ben

      --
      Fantasie ist wichtiger als Wissen. - Albert Einstein
      1. Hi,

        nein. Dein Filesystem kann das nicht (es weiß nicht einmal, was eine Zeile ist), da kann Dir PHP auch nicht weiter helfen.

        Hm, bist du da sicher? Ich meine, dass man doch auch eine Datei zeilenweise auslesen kann oder? Wie sollte das dann gehen?

        PHP hat für den Begriff "Zeile" eine Definition. Das hilft aber beim Schreibzugriff nicht.

        Cheatah

        --
        X-Will-Answer-Email: No
        1. Hi Cheatah,

          achso, ok. Bin noch Anfänger in Sachen PHP. Hatte das nur im Hinterkopf.

          Danke für die Aufklärung! :)

          Viele Grüße
          Ben

          --
          Fantasie ist wichtiger als Wissen. - Albert Einstein
          1. Hi,

            Danke für die Aufklärung! :)

            gerne. Übrigens ist das unabhängig von der verwendeten Sprache - es geht hier _nur_ um Filesysteme.

            Cheatah

            --
            X-Will-Answer-Email: No
            1. Hallo,

              na davon hab ich erst recht nicht so viel Ahnung. Mir ist der Begriff nicht geläufig. Was genau bezeichnet er denn?
              Dateisysteme...hm, naja, kann man sich eigentlich denken, aber habe davon wirklich keine/kaum Ahnung.

              Viele Grüße
              Ben

              --
              Fantasie ist wichtiger als Wissen. - Albert Einstein
              1. Hi,

                na davon hab ich erst recht nicht so viel Ahnung. Mir ist der Begriff nicht geläufig. Was genau bezeichnet er denn?

                hast Du Windows? Dann schau Dir mal die "Eigenschaften" einer Festplatte an. Dort müsste relativ weit oben das eingesetzte Filesystem stehen (bei mir (WinNT) ist es beispielsweise NTFS). Das Filesystem ist das, was im Grunde genommen noch vor dem Betriebssystem liegt - es regelt jeden Zugriff auf Dateien, Verzeichnisse etc., auch auf die Systemdateien des Betriebssystems.

                Cheatah

                --
                X-Will-Answer-Email: No
                1. Moin!

                  hast Du Windows? Dann schau Dir mal die "Eigenschaften" einer Festplatte an. Dort müsste relativ weit oben das eingesetzte Filesystem stehen (bei mir (WinNT) ist es beispielsweise NTFS). Das Filesystem ist das, was im Grunde genommen noch vor dem Betriebssystem liegt - es regelt jeden Zugriff auf Dateien, Verzeichnisse etc., auch auf die Systemdateien des Betriebssystems.

                  Naja, damit liegst _du_ jetzt zur Abwechslung mal falsch. Als Dateisystem bezeichnet man die Art der Speicherung der Dateien auf der Festplatte. Das ist aber erstmal keine Software, sondern eine reine Festlegungssache. Das Betriebssystem sorgt dafür, dass die theroretische Festlegung dann auch tatsächlich auf der Festplatte abgelegt wird.

                  Der Treiber fürs Dateisystem ist also Bestandteil des Betriebssystems - in diesem Fall hilft er eben beim Zugriff auf die Festplatte, und nicht (nur als Beispiel) beim Zugriff auf die Netzwerkkarte. :)

                  - Sven Rautenberg

                  --
                  "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
                  1. Hi,

                    Naja, damit liegst _du_ jetzt zur Abwechslung mal falsch.

                    soll vorkommen ;-)

                    Als Dateisystem bezeichnet man die Art der Speicherung der Dateien auf der Festplatte. Das ist aber erstmal keine Software, sondern eine reine Festlegungssache. Das Betriebssystem sorgt dafür, dass die theroretische Festlegung dann auch tatsächlich auf der Festplatte abgelegt wird.

                    Ich verstehe diesen Teil des Betriebssystems als (hauptsächliches) Element des Filesystems. Entweder ist diese Vorstellung _völlig_ absurd ;-) oder meine Beschreibung als "vor dem Betriebssystem" war, was ich zugeben muss, missverständlich. In jedem Fall danke für die Erklärung :-)

                    Cheatah

                    --
                    X-Will-Answer-Email: No
                    1. Na klar kann man eine bestimmte Zeile einer datei mit PHP ersetzen - wenn auch nicht direkt:

                      per file() einlesen --> gewünschte Zeile ändern --> alle Zeilen per implode(mit Seperator \n) wieder zusammensetzen --> in datei schreiben --> fertig!!!

                      thomas.

                      1. Hi,

                        Na klar kann man eine bestimmte Zeile einer datei mit PHP ersetzen - wenn auch nicht direkt:

                        äh, und genau das ist das Problem. Siehe Andreas' Antwort auf seinen eigenen Artikel.

                        Cheatah

                        --
                        X-Will-Answer-Email: No
                        1. Hallöle,

                          da stand doch immer noch der Senftopf rum...

                          Natürlich kann man in einer als Textdatei organisierten (nicht unbedingt in einer als Textdatei geöffneten) Datei eine einzelne Zeile überschreiben. Generell muss man sie dazu im Binärmode und/oder in wahlfreiem Zugriff öffnen.

                          Nun gibt es je nach Betriebssystem und verwendeter Programmiersprache verschiedene Funktionen, die das zeilenweise Lesen trotzdem unterstützen, oder es gibt sie eben nicht. C regelt das alles durch eine eigene Implementierung. Die Datei wird von den in C vorhandenen Routinen also immer im "Binärmodus" des Betriebssystemes geöffnet. Ich kann nun diese Datei mit den Dateifunktionen für Textdateien lesen lassen, Zeile für Zeile. Ich merke mir bei jeder Zeile die Position des Dateizeigers, BEVOR ich die Zeile lese. Außerdem merke ich mir die Länge der gelesenen Zeile. Dafür brauche ich nur zwei Variablen, die ich immer wieder überschreiben kann. Wenn die passende Zeile gefunden wurde, kann ich die Zeile in gleicher Länge durch eine neue ersetzen, indem ich den Dateizeiger auf die Startposition der Zeile setze (habe ich mir ja gemerkt) und die geänderte Zeile GLEICHER Länge zurückschreibe. Ich kann sogar aus einer Zeile mehrere machen, indem ich das für das Betriebssystem vorgeschriebene Zeilenendezeichen einfach irgendwo dazwischen stanze. Genauso kann ich aus mehreren Zeilen eine machen, indem ich einfach die Zeilenende-Zeichen gegen neutrale Elemente (z.B. Leerzeichen, NULL, je nach System und Applikation) ersetze.

                          Wenn man aber z.B. mit einem in Pascal geschriebenen Programm eine Datei im Textmodus auf einem DOS/Windows-System öffnet, dann kann man nicht in die Datei zurückschreiben, da der Pascal-Compiler auf die speziellen Textdatei-Funktionen des Betriebssystems (BIOS, extended BIOS) zurückgreift, und die lassen bei DOS/WIN eben kein Schreiben mitten in als Textdatei geöffnete Dateien zu, nur Anhängen an das Ende oder Überschreiben.

                          Liebe Grüße aus http://www.braunschweig.de

                          Tom

                          --
                          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  2. Hi Andreas,

    dafür würde ich mir mal die Funktionen fopen() und str_replace() ansehen. Damit dürfte das kein Problem sein! :-)

    Was genau möchtest du denn machen?

    Viele Grüße
    Ben

    --
    Fantasie ist wichtiger als Wissen. - Albert Einstein
  3. Hallo,
    die einzigste Möglichkeit die ich kenne ist, komplette Textdatei auslesen und mit neuem Wert wieder schreiben lassen.
    Ich wollte nun wissen ob es auch Befehle gibt die sich ein Array merken und nur eine bestimmte Zeile ändern können.

    Wie z.B. neuer Wert $zeile[8]

    Andreas

    1. Hi,

      die einzigste Möglichkeit die ich kenne ist, komplette Textdatei auslesen und mit neuem Wert wieder schreiben lassen.

      damit weißt Du alles, was man hierzu wissen kann.

      Ich wollte nun wissen ob es auch Befehle gibt die sich ein Array merken und nur eine bestimmte Zeile ändern können.

      Nein, das kann das Filesystem nicht, also kann es auch keine Befehle dazu geben.

      Cheatah

      --
      X-Will-Answer-Email: No
    2. Hallo

      Hallo,
      die einzigste Möglichkeit die ich kenne ist, komplette Textdatei auslesen und mit neuem Wert wieder schreiben lassen.
      Ich wollte nun wissen ob es auch Befehle gibt die sich ein Array merken und nur eine bestimmte Zeile ändern können.

      Wie z.B. neuer Wert $zeile[8]

      Das geht natürlich. Das hat aber quasi nichts mit der Datei zu tun.
      Du liest die Datei z.B. mit file() aus und überführst sie in ein Array.
      Und nur mit dem Array arbeitest Du dann. Dazu:
      http://www.php.net/manual/de/ref.array.php (besonders array_splice())
      Erst nach Abschluß der Änderungen wird die Datei neu geschrieben(fopen($datei,"w"))
      und erst dann wird das Ganze wieder zu einer Datei mit neuem Zustand.
      Der alte Zustand der Datei ist bis zu dem Moment des Neuschreibens der
      Datei _der_ einzige verfügbare Zustand.

      Tschö, Auge