Gantikan keseluruhan baris dalam fail teks apabila perkataan tertentu ditemui
P粉883278265
P粉883278265 2023-10-18 16:59:05
0
2
487

Bagaimana untuk menggantikan baris teks tertentu dalam fail menggunakan php?

Saya tidak tahu nombor talian. Saya mahu menggantikan baris yang mengandungi perkataan tertentu.

P粉883278265
P粉883278265

membalas semua(2)
P粉138711794

Anda perlu menulis ganti keseluruhan fail.

Jadi, untuk fail yang agak kecil, baca fail ke dalam tatasusunan , cari perkataan, gantikan baris yang ditemui, dan tulis semua yang lain ke fail.

Untuk fail yang besar, algoritmanya berbeza sedikit, tetapi secara keseluruhannya betul-betul sama.

Bahagian penting ialah File Locking

Inilah sebabnya kami memilih pangkalan data.

P粉155710425

Kaedah yang boleh digunakan untuk fail yang lebih kecil yang sesuai dalam ingatan anda dua kali:

$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', $data);

Nota ringkas, PHP > 5.3.0 menyokong fungsi lambda, jadi anda boleh mengalih keluar pengisytiharan fungsi yang dinamakan dan memendekkan pemetaan kepada:

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

Secara teorinya anda boleh menjadikannya satu (lebih sukar untuk diikuti) pernyataan php:

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

Untuk fail yang lebih besarkaedah lain (kurang intensif memori) harus digunakan:

$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');
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan