Carsten-1985: Bestimmte zeile überschreiben

Moin selfHTMl´er,
weiß. jemand wie man in PHP eine Zeile einer Textdatei überschreibt??Sagen wir ich hab eine txt datei mit hundert zeilen, wobei jede zeile beim Schreiben durch ein \n getrennt wurde. Nun möchte ich Zeile 33 überschreiben.Wie stell ich das an???
Interessant wäre dann auch noch das löschen der Zeile, so das der Rest nachrückt(ich lösch zeile 33 von hundert danach sinds nur noch 99 ohne leerezeile)
Hoffe mir kann jm. helfen.
Grüße Carsten

  1. Hallo,

    weiß. jemand wie man in PHP eine Zeile einer Textdatei überschreibt??Sagen wir ich hab eine txt datei mit hundert zeilen, wobei jede zeile beim Schreiben durch ein \n getrennt wurde. Nun möchte ich Zeile 33 überschreiben.Wie stell ich das an???

    Gesamte Datei in Variable einlesen, mit explode()-Funktion anhand der Zeichenkette "\n" ein Array draus machen und dann über $array[32] auf das 33. Element zugreifen.

    Interessant wäre dann auch noch das löschen der Zeile, so das der Rest nachrückt(ich lösch zeile 33 von hundert danach sinds nur noch 99 ohne leerezeile)

    Dafür könnte man ein zweites Array anlegen, ist aber sicher nicht die beste Möglichkeit.

    Viele Grüße

  2. Hallo Carsten.

    Nun möchte ich Zeile 33 überschreiben.Wie stell ich das an???
    Interessant wäre dann auch noch das löschen der Zeile, so das der Rest nachrückt […]

    Du könntest hier mit file() arbeiten. Willst du die Zeile überschreiben, weist du dem jeweiligen Schlüssel einen neuen Wert zu; willst du sie löschen, verwendest du unset().

    Einen schönen Sonntag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
  3. Hallo Carsten,

    • Datei mit file() enlesen
    • mit for durch das Array marschieren
    • wenn du an der entprechenden Zeile ankommst, den Wert ueberschreiben oder mit unset() loeschen, danach evtl. break
    • Array mit implode() in String umwandeln
    • Datei mit fopen(), fwrite(), fclose() ueberschreiben

    Du musst beachten, dass file() etwas eigensinnig mit Zeilenennden umgeht, entweder behandelst du bei iterieren alle Werte des Arrays mit trim(), dann wird es aber nichts mit break, oder gibst bei implode() entsprechende Argumente mit.

    Gruß,

    Dieter

    1. Hallo Dieter,
      diese lösung war mir bekannt ich dachte eher an so etwas wie:
      setze datei zeiger in zeile 33, lösche zeile, schreibe zeile mit neuem inhalt. Aber wenn das so net funzt muss ichs wohl über den Array umweg machen!

      MFG Carsten-1985

      1. Moin!

        diese lösung war mir bekannt ich dachte eher an so etwas wie:
        setze datei zeiger in zeile 33, lösche zeile, schreibe zeile mit neuem inhalt. Aber wenn das so net funzt muss ichs wohl über den Array umweg machen!

        Kann nicht funktionieren, weil deine Zeile 33 aus einer bestimmten Anzahl von Bytes besteht. Nur wenn der neue Inhalt dieser Zeile aus identisch vielen Bytes besteht, kann man an ein Überschreiben der Zeile denken. Sind es weniger oder mehr Bytes, schlägt dieser Versuch aber fehl - wobei weniger Bytes eventuell noch mit Füllbytes auf die korrekte Länge aufgefüllt werden könnten, für zuviele Bytes kann das Dateisystem aber definitiv nicht mehr Platz an dieser Stelle einfügen.

        Deshalb ist die allgemeine Lösung immer: Datei einlesen, manipulieren, neu speichern. Wobei man bei kleinen Dateien den Inhalt komplett in den RAM einlesen kann, große Dateien liest man stückchenweise ein und speichert das bearbeitete Resultat in einer zweiten Datei.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. Jup so mach ichs dann danke!
          MFG