ホームページ  >  記事  >  バックエンド開発  >  テキスト ファイル内の特定の単語を含む行を効率的に置換するにはどうすればよいですか?

テキスト ファイル内の特定の単語を含む行を効率的に置換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-12 08:20:02206ブラウズ

How to Efficiently Replace a Line Containing a Specific Word in a Text File?

テキスト ファイル内の特定の行の検索と置換

テキスト ファイルの処理は、多くのプログラミング シナリオで一般的なタスクです。大きなファイルを扱う場合、正確な行番号を知らずにテキストの特定の行を識別して変更するのは困難な場合があります。この記事では、ファイル内の位置に関係なく、PHP を使用してテキスト ファイル内の特定の単語を含む行を置き換える効果的な方法を説明します。

方法 1: メモリ内の小さいファイルを処理する

の場合ファイル全体をメモリにロードできる小さいファイルの場合、効率的な解決策は、すべての行を配列に読み込んでから置換関数を適用することです。次のコード スニペットは、このプロセスを説明します:

$data = file('myfile'); // read 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);

PHP バージョン 5.3.0 以降では、ラムダ関数を使用して置換手順を簡略化できます:

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

アプローチ 2:大きなファイルを効率的に処理する

ただし、使用可能なメモリを超える可能性のある大きなファイルの場合は、別の戦略が必要です。次のコード例では、ストリーミング アプローチを使用して、最小限のメモリ消費で特定の行を読み取り、置換します。

$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);

// Handle the replacement result
if ($replaced)
{
  rename('myfile.tmp', 'myfile');
} else {
  unlink('myfile.tmp');
}

このシナリオでは、少なくとも 1 行が置換されると、一時ファイル 'myfile.tmp' の名前が変更されます。 「myfile」にコピーし、元のファイルを更新されたコンテンツで事実上上書きします。それ以外の場合、置換が行われなかった場合、一時ファイルは削除されます。

結論

これらの手法は、特定の単語に基づいてテキスト ファイル内の特定の行を検索して置換するための効率的かつ柔軟な方法を提供します。メモリに収まる小さなファイルを扱う場合でも、ストリーミング アプローチが必要な大きなファイルを扱う場合でも、これらのソリューションは、この一般的なテキスト ファイル操作タスクを処理するための実用的なアプローチを提供します。

以上がテキスト ファイル内の特定の単語を含む行を効率的に置換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。