Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Zeile aus Texdatei löschen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PEcman
    hat ein Thema erstellt [Erledigt] Zeile aus Texdatei löschen.

    [Erledigt] Zeile aus Texdatei löschen

    Hallo,

    Ich bin ein absoluter Anfänger, mein Problem ist:

    Ich habe eine Textdatei die so aussieht:

    Test
    Muster
    Maier

    Es soll eine bestimmte Zeile gelöscht werden und zwar durch Angabe von dem Inhalt.

    Ich übergebe also mit Post aus einer anderen Seite z.B. Muster,
    dann soll er Muster aus der Textdatei löschen, so das sie dann so aussieht.

    Test
    Maier

    Ich habe schon zich Sachen probiert und komm auf keinen grünen Zweig.
    Das beste Ergbins hab ich mit str_replace erreicht, allerdings ersetze ich damit nur einen Text durch nichts. Der Absatz, also die Leerzeile bleibt.

    Kann mir wer ein kleines Script anbieten, das mir hilft?

    Vielen Dank im Vorraus.

  • nikosch
    antwortet
    Ah, ahaa.
    You can also specify the data parameter as a single dimension array. This is equivalent to file_put_contents($filename, implode('', $array)).
    Cool, das war mir neu...

    Einen Kommentar schreiben:


  • cycap
    antwortet
    @nikosch: nö: [man]file_put_contents[/man]

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Zitat von Frank Beitrag anzeigen
    PHP-Code:
    <?php
    $file 
    file($filename);
    $file array_map("trim"$file);
    unset(
    $file[array_search(trim($delete), $file)]);
    file_put_contents($filename$fileFILE_TEXT);
    ?>
    Ähhäm, wird da nicht genau 'Array' in der Datei stehen? Kein implode?

    Einen Kommentar schreiben:


  • PEcman
    antwortet
    Genau das ist, was ich gesucht habe.
    Danke nochmal.

    Einen Kommentar schreiben:


  • Frank
    antwortet
    Ist doch nicht weiter schwer oder?
    PHP-Code:
    <?php
    $filename 
    "test.txt";
    $delete $_POST["delete"];
    $file file($filename);
    $file array_map("trim"$file);
    unset(
    $file[array_search(trim($delete), $file)]);
    file_put_contents($filename$fileFILE_TEXT);
    ?>
    Aufruf dann über ein Formular (mode: Post) mit dem textfeld name="delete"

    Einen Kommentar schreiben:


  • PEcman
    antwortet
    An den vorschlag von Chris hab ich auch schon gedacht,
    allerdings bin ich zu unerfahren um das hinzubekommen.

    Mein Versuch:
    PHP-Code:
    <?php
    $datei 
    "datei.txt";
    $kommentar file($datei);
    $match "muster";
    foreach (
    $datei as $line) {
    unset(
    $line[$match]); 
    }
    $neu=implode("",$line); 
    while( list ( 
    $key$val ) = each $neu ) )
    {
    echo 
    $val '<br>';
    }
    ?>
    Mit file_put_contents bekomm ich nur ne Fehlermeldung.

    Script damit:
    PHP-Code:
    <?php
    $datei 
    "datei.txt";
    $kommentar file($datei);
    $match "muster";
    foreach (
    $kommentar as $line) {
    unset(
    $line[$match]); 
    }
    $neu=implode("",$line); 
    file_put_contents($datei$neu);
    ?>

    Einen Kommentar schreiben:


  • PEcman
    antwortet
    Bei der Variante von nikosch funktioniert das mit \r\n nicht. Wenn ich nur \n mache bekomm ich wieder die Ausgabe mit Leerzeile.
    Das ist ein Webpacket von 1und1 also Linux. Nebenbei, da läuft die PHP-Version 4.4.8.

    Mein Script dazu:
    PHP-Code:
    <?php
    $datei 
    "datei.txt";
    $kommentar file($datei);
    $suchbegriff "muster";
     
    // Daten löschen
    $fulltext_new str_replace ($suchbegriff "\n" '' $kommentar); 
    // Daten anzeigen
    while( list ( $key$val ) = each $fulltext_new ) )
    {
    echo 
    $val '<br>';
    }
    ?>

    Einen Kommentar schreiben:


  • Chriz
    antwortet
    Datei als Array einlesen:
    PHP: file - Manual

    Mit foreach durchlaufen und bei Treffer auf gleichen Wert, unset:
    PHP: unset - Manual

    Werte wieder zusammensetzen:
    PHP: implode - Manual

    Und in Datei zurueckschreiben:
    PHP: file_put_contents - Manual

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Bei der Ersetzung mußt Du das jeweilige Zeilenende berücksichtigen, unter Windows bspw. "\r\n" . Das macht die Leerezeile aus. Im einfachsten Falle ersetzt Du also so:
    PHP-Code:
    $fulltext_new str_replace ($suchbegriff "\r\n" '' $fulltext); 
    Für generelles zeilenweises Arbeiten kann aber auch ein Weg über Arrays via
    file () , str_replace () , implode () sinnvoll sein. Ist Geschmackssache.

    Nachtrag: Andere Betriebssysteme oder Dateiformate benutzen u.U. andere Zeilenendzeichen. Wenn Du die Verwendung eines bestimmten Zeilenendzeichens nicht garantieren kannst, kann es nötig sein, einen regulären Ausdruck zu verwenden.

    Btw: Willkommen im Forum!

    Einen Kommentar schreiben:

Lädt...
X