1

テキスト ファイルからテキストの一部を削除/編集しようとしています。たとえば、テキスト ファイルに 10 行ある場合、他の行に影響を与えずに 5 行目を編集するか、3 行目を削除します。

現在私がやっていること 1.テキストファイルを開き、php変数のデータを読み取ります 2.その変数の編集を完了します 3.テキストファイルの内容を削除します。4. その上に新しいコンテンツを書く

しかし、コンテンツ全体を削除せずに、またはそれらのコンテンツを編集するだけで、そのことを行う方法はありますか?

私の現在のコードはこのようなものです

$file = fopen("users.txt", "a+");
$data = fread($file, filesize("users.txt"));
fclose($file);
$newdata = str_replace($old, $new, $data);
file_put_contents("users.txt", "");
$file = fopen("users.txt", "a+");
fwrite($file, $newdata);
fclose($file);
4

4 に答える 4

1
$str = '';
$lines = file("users.txt");
foreach($lines as $line_no=>$line_txt)
{
$line_no += 1; // Start with zero 
//check the line number and concatenate the string 
if($line_no == 5)
{
// Append the $str with your replaceable text
}
else{
$str .= $line_txt."\n";
}
}
// Then overwrite the $str content to same file
// i.e file_put_contents("users.txt", $str);

私の理解に基づいて解決策を追加しました。それが役立つことを願っています!!!

于 2013-04-02T13:44:56.053 に答える
0

各行で作業できます。

$lines = file("users.txt");
foreach($lines as &$line){
  //do your stufff 
  // $line is one line
  //
}
$content = implode("", $lines);
//now you can save $content like before
于 2013-04-02T12:25:41.697 に答える
0

テキスト ファイルに 10 行しかない場合、それらが非常に長い行でない限り、内容を変更するために必要な物理 I/O の量を変更することになります (ディスクは、一度に 1 つの物理セクターに対してのみデータの読み取り/書き込みを行います)。 -そして、512バイトセクターの時代は過ぎ去りました)。

はい、変更されたセクターのみを書き込むことで大きなファイルを変更できますが、フレーミング エラーを防ぐために、データを同じサイズのものに置き換える必要があります (PHP では、モード c+ で fopen を使用し、fgets/fseek/fwrite/ftell 、fclose)。

実際の正しい答えは、多値データをテキスト ファイルに格納するのをやめて、DBMS を使用することです (これにより同時実行性の問題も解決されます)。

于 2013-04-02T12:29:53.863 に答える