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.
Ankündigung
Einklappen
Keine Ankündigung bisher.
[Erledigt] Zeile aus Texdatei löschen
Einklappen
Neue Werbung 2019
Einklappen
X
-
[Erledigt] Zeile aus Texdatei löschen
Stichworte: -
-
Ah, ahaa.
You can also specify the data parameter as a single dimension array. This is equivalent to file_put_contents($filename, implode('', $array)).
-
Zitat von Frank Beitrag anzeigenPHP-Code:<?php
$file = file($filename);
$file = array_map("trim", $file);
unset($file[array_search(trim($delete), $file)]);
file_put_contents($filename, $file, FILE_TEXT);
?>
Einen Kommentar schreiben:
-
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, $file, FILE_TEXT);
?>
Einen Kommentar schreiben:
-
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>';
}
?>
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:
-
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:
-
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:
-
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);
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:
Einen Kommentar schreiben: