最近、ファイル内の特定の文字行を変更するという興味深い問題に遭遇しました。ただし、ファイルが大きすぎるため、fgets を使用してジャンプすることができません。そして、fwrite を使用して特定の文字列を変更します:
$fp = fopen(d:/file.txt, r+);
if ($fp) {
$i = 1;
一方 (!feof($fp)) {
// データの 2 行目を変更します
if ($i == 2) {
fseek($fp, 2, SEEK_CUR);
fwrite($fp, #);
休憩;
}
fgets($fp);
$i++;
}
fclose($fp);
}
ここで注意する必要があるのは、fgets が行を取得した後、ファイル ポインタは行の終わり (つまり、次の行の先頭) を指すため、fwrite は fgets の後の次の行の先頭で動作することです。行内でどの文字を書き始めるかについては、fseek 関数を使用してファイルポインタを移動できます。もう 1 つ注意すべき点は、ここでの fwrite は挿入操作ではなく置換操作を実行するため、ポインターの後の文字が 1 つずつ置き換えられることです。挿入方法については、まだ勉強していません。難しいと推測されます。効率を高めるために、別の一時ファイルに書き込むことしかできないかもしれません。他に良い方法があるかどうかはわかりません。
さらに、今日は SPL を使用して操作する方法も見ました。
$fp = 新しい SplFileObject(d:/file.txt, r+);
// 2 行目に移動します。seek メソッドのパラメーターは 0 からカウントされます。ポインターが行の末尾を指していることをテストしたため、3 行目が変更されます
$fp->seek(1);
// 現在の行の内容(2行目)を取得します
$line = $fp->current();
//以下は3行目の操作です
$fp->fseek(2, SEEK_CUR);
$fp->fwrite(#);
SplFileObject によって提供されるメソッドは、キー/値メソッドを使用してファイル行を横断するなど、基本的なファイル操作関数よりも豊富です。 SPL は PHP5 に追加する必要があります。他にも便利なオブジェクトがたくさんあります。配列、ファイル ディレクトリ操作、例外処理、いくつかの基本的な型操作などが含まれます。これらのメソッドは、基になる操作の処理をより便利にするために、SPL を継承することでまだ追加されています。
http://www.bkjia.com/PHPjc/486465.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/486465.html技術記事 p は最近、ファイル内の特定の文字行を変更するという興味深い問題に遭遇しました。ただし、ファイルが大きすぎるため、fgets を使用して指定された行にジャンプすることができません。 ..