Wie ersetzt man eine bestimmte Zeile in einer Textdatei mit PHP?

Lesezeit: 4 Minuten

wie man eine bestimmte zeile mit php ersetzt. Ich kenne die Zeilennummer nicht. Ich möchte eine Zeile ersetzen, die ein bestimmtes Wort enthält.

Wie ersetzt man eine bestimmte Zeile in einer Textdatei mit
gnarf

Ein Ansatz, den Sie für kleinere Dateien verwenden können, die in Ihren Speicher passen zweimal:

$data = file('myfile'); // reads an array of lines
function replace_a_line($data) {
   if (stristr($data, 'certain word')) {
     return "replacement line!\n";
   }
   return $data;
}
$data = array_map('replace_a_line',$data);
file_put_contents('myfile', implode('', $data));

Eine kurze Anmerkung, PHP > 5.3.0 unterstützt Lambda-Funktionen, sodass Sie die benannte Funktionsdeklaration entfernen und die Zuordnung kürzen können auf:

$data = array_map(function($data) {
  return stristr($data,'certain word') ? "replacement line\n" : $data;
}, $data);

Sie könnten dies theoretisch zu einer einzigen (schwerer zu befolgenden) PHP-Anweisung machen:

file_put_contents('myfile', implode('', 
  array_map(function($data) {
    return stristr($data,'certain word') ? "replacement line\n" : $data;
  }, file('myfile'))
));

Ein weiterer (weniger speicherintensiver) Ansatz, den Sie verwenden sollten größere Dateien:

$reading = fopen('myfile', 'r');
$writing = fopen('myfile.tmp', 'w');

$replaced = false;

while (!feof($reading)) {
  $line = fgets($reading);
  if (stristr($line,'certain word')) {
    $line = "replacement line!\n";
    $replaced = true;
  }
  fputs($writing, $line);
}
fclose($reading); fclose($writing);
// might as well not overwrite the file if we didn't replace anything
if ($replaced) 
{
  rename('myfile.tmp', 'myfile');
} else {
  unlink('myfile.tmp');
}

  • Der weniger speicherintensive Ansatz ist genau das, was ich brauchte (einfach und leicht verständlich)…..DANKE!!!

    Benutzer321531

    6. Februar 2015 um 21:54 Uhr

  • Um einen Fehler “Zugriff verweigert” zu vermeiden, verwenden Sie Code 5 rename() nach dem fclose() zu früh, musste ich tun fseek() auf 0 für beide Griffe, dann verwenden stream_copy_to_stream() kopieren und dann fclose() die Handler.

    – Leopoldo Sanczyk

    5. Juli 2019 um 7:39 Uhr

Sie müssen die gesamte Datei überschreiben.

Also, für die relativ kleine Datei, Datei in Array lesenWort suchen, gefundene Zeile ersetzen, schreiben der ganze Rest hinein Datei.

Für die große Datei ist der Algorithmus etwas anders, aber im Allgemeinen ziemlich gleich.

Wichtiger Teil ist Dateisperre

Deshalb bevorzugen wir eine Datenbank.

Sie können den mehrzeiligen Modus auch mit regulären Ausdrücken verwenden

preg_match_all('/word}/m', $textfile, $matches);

Dies setzt natürlich voraus, dass es sich um ein kleineres Dokument handelt, das bereit und geladen ist. Ansonsten sind die anderen Antworten weitaus realer als eine Lösung.

Wie ersetzt man eine bestimmte Zeile in einer Textdatei mit
Gordon

Wenn Sie die Zeile nicht kennen, müssen Sie alle Zeilen durchsuchen.

Entweder Zeile für Zeile über die Datei iterieren oder liest die Datei auf einmal in den Speicher. Dann finden Sie das Wort entweder mit einer Kombination von strpos und str_replace oder verwenden preg_replace.

Wenn Sie iterieren, verwenden Sie einfach strpos und ersetzen Sie die Zeile, sobald sie nicht FALSE zurückgegeben hat. Speichern Sie die Datei dann wieder auf der Festplatte.

$filedata = file('filename');
$newdata = array();
$lookfor="replaceme";
$newtext="withme";

foreach ($filedata as $filerow) {
  if (strstr($filerow, $lookfor) !== false)
    $filerow = $newtext;
  $newdata[] = $filerow;
}

Jetzt $newdata enthält den Dateiinhalt als Array (verwenden Sie implode() wenn Sie kein Array möchten) mit der Zeile, die “replaceme” enthält, ersetzt durch “withme”.

1646256847 63 Wie ersetzt man eine bestimmte Zeile in einer Textdatei mit
Gemeinschaft

Das ist gut, wenn Sie nach einem Teilstring (ID) in einer Zeile suchen und die alte Zeile durch die neue ersetzen möchten.

Code:

$id = "123";
$new_line = "123,Programmer\r"; // We're not changing the ID, so ID 123 remains.
$contents = file_get_contents($dir);
$new_contents= "";
if( strpos($contents, $id) !== false) { // if file contains ID
    $contents_array = preg_split("/\\r\\n|\\r|\\n/", $contents);
    foreach ($contents_array as &$record) {    // for each line
        if (strpos($record, $id) !== false) { // if we have found the correct line
            $new_contents .= $new_line; // change record to new record
        }else{
            $new_contents .= $record . "\r";
        }
    }
    file_put_contents($dir, $new_contents); // save the records to the file
    echo json_encode("Successfully updated record!");
}
else{
    echo json_encode("failed - user ID ". $id ." doesn't exist!");
}

Beispiel:

Alte Datei:

Personalausweis, Beruf

123, Schüler

124, Ziegelschicht

Das Ausführen des Codes ändert die Datei in:

Neue Datei:

Personalausweis, Beruf

123, Programmierer

124, Ziegelschicht

1646256847 30 Wie ersetzt man eine bestimmte Zeile in einer Textdatei mit
DMVerfurth

Sie können die Datei mit dem in ein Array umwandeln explode(); Funktion, bearbeiten Sie ein beliebiges Element im Array, verwenden Sie die implode(); Funktion, um das Array wieder in einen String umzuwandeln, dann können Sie den String wieder in die Datei einfügen, indem Sie die verwenden file_put_contents(); Funktion. Dies wird in der folgenden Funktion gezeigt:

function file_edit_contents($file_name, $line, $new_value){
  $file = explode("\n", rtrim(file_get_contents($file_name)));
  $file[$line] = $new_value;
  $file = implode("\n", $file);
  file_put_contents($file_name, $file);
}

916350cookie-checkWie ersetzt man eine bestimmte Zeile in einer Textdatei mit PHP?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy