cari

Rumah  >  Soal Jawab  >  teks badan

Gantikan keseluruhan baris dalam fail teks apabila perkataan tertentu ditemui

Bagaimana untuk menggantikan baris teks tertentu dalam fail menggunakan php?

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

P粉883278265P粉883278265422 hari yang lalu473

membalas semua(2)saya akan balas

  • P粉138711794

    P粉1387117942023-10-19 13:40:07

    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.

    balas
    0
  • P粉155710425

    P粉1557104252023-10-19 13:24:24

    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');
    }

    balas
    0
  • Batalbalas