Bestimmte zeile überschreiben
Carsten-1985
- php
0 Richard0 Ashura0 Dieter Raber
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
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
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
Hallo Carsten,
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
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
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
Jup so mach ichs dann danke!
MFG