FeGm: Zeile suchen & auslesen & löschen

Hallo zusammen!

Ich habe eine Textdatei mit folgendem inhalt:
ABC123
DEF456
HIJ789
KLM345

Mein PHP Skript soll dann die Zeile mit dem Inhalt "DEF" ausgeben und sie danach aus der Datei löschen.

Wie kann ich das mit PHP machen?

Ich danke schonmal für alle Antworten, Fegm

  1. Hallo,

    versuche die Datei zB zeilenweise in ein Array
    zu lesen. Prüfe dann, welche Zeile den
    gesuchten Text enthält. Markiere diese Zeile
    dann irgendwie und schreibe anschliessend alle
    nichtmarkierten Zeilen wieder in die ursprüngliche
    Datei.

    file, fopen und fputs könnten dabei helfen.

    Grüße,

    Z.

  2. Hallo,

    Ich habe eine Textdatei mit folgendem inhalt:
    ABC123
    DEF456
    HIJ789
    KLM345

    Mein PHP Skript soll dann die Zeile mit dem Inhalt "DEF" ausgeben und sie danach aus der Datei löschen.

    Wie kann ich das mit PHP machen?

    Das hängt davon ab, wie groß die Textdatei wirklich ist.

    Wenn ausreichend Speicher zur Verfügung steht, könnte man die Datei mittels

    file()

    vollständig in ein Array einlesen. In diesem Array könnte man dann mittels

    array_search()

    nach dem Index für die Zeile suchen.

    Anschließend könnte man mittels

    echo htmlentities($filearray[$index],ENT_QUOTES)

    die Zeile aisgeben  und dann mit

    unset ($filearray[$index])

    das Element löschen.

    Und nun müsste man noch die Datei zurückschreiben. Dafür wäre es sinnvoll, aus dem Array mittels

    $stream = implode('',$filearray);

    wieder eine  Stream zu machen, den man dann z.B. mit

    file_put_contents($filename, $stream)

    oder einen vergleichbaren Funktion zurückschreiben.

    Allerdings darf einen bei diesem gesamten Vorgang niemand anderes stören, sonst gibt es Durcheinander. Um Durcheinander in einer Multiuser-Umgebung zu vermeiden, muss man ich mit File-Locking beschäftigen. Aber das ist ein neues Thema.

    LG
    Chris

  3. Moin!

    Hallo zusammen!

    Ich habe eine Textdatei mit folgendem inhalt:
    ABC123
    DEF456
    HIJ789
    KLM345

    Mein PHP Skript soll dann die Zeile mit dem Inhalt "DEF" ausgeben und sie danach aus der Datei löschen.

    Wie kann ich das mit PHP machen?

    Ich mache sowas am liebsten in einer subshell:

    <?php
    $strZeile = wget "^DEF" dateiname;

    gibt die Zeile aus.

    $dummy    = cp dateiname dateiname.tmp;

    kopiert die Datei

    $dummy    = wget -v "^DEF" dateiname.tmp > dateiname';
    #schreibt alle Zeilen außer der angegebenen zurück.;
    ?>

    Vorteil: rasend schnell, kann reguläre Ausdrücke, spart Speicher...

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development