3

こんにちは、これは私の問題です。特定の文字に到達するまでファイルから読み取り、phpを使用してその特定の文字の前に新しい行に文字列を書き込みます。fopenによる読み取り方法も知っています。行ごとの読み取り方法も知っています。最後の部分がわからない(その前の行に私の文字列を挿入する)この例を見てください:MYfileに含まれるもの:

Hello 
How are You 
blab la 
...
#$?!
other parts of my file...

だから私はそれが$に達したときにそれが欲しいことを知っていますか?!その前に私の文字列を行に入れて、私の文字列が私がやったと仮定します!

現在、MYfileには次のものが含まれています。

Hello 
How are You 
blab la 
...
#I did it!
#$?!
other parts of my file...

どうすればいいですか?!?私がこれまでにしたこと:

$handle = @fopen("Test2.txt", "r");
if ($handle) 
{
while (($buffer = fgets($handle, 4096)) !== false) 
{
    if($buffer == "#?") echo $buffer;
}
if (!feof($handle)) {
    echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
4

2 に答える 2

1

$?!あなたは単にテキストを読むときにを検索する必要があります。

行ごとに読んでいるので、各行で確認してください。

個人的には、ファイル全体を一度に読み取り(大きすぎないことを前提として)、文字列を必要なvlaueに置き換えます。

$needle = '$?!'; // or whatever string you want to search for
$valueToInsert = "I did it!"; // Add \r\n if you need a new line

$filecontents = file_get_contents("Test2.txt"); // Read the whole file into string
$output = str_replace($needle, $valueToInsert . $needle, $filecontents);

echo $output; // show the result

上記のコードはテストされていません-微調整が必​​要な場合があります。

于 2012-11-22T17:28:19.930 に答える
0

マーカーを知っているのでfseek、バイト数を巻き戻して(whenceをSEEK_CURに設定)fwrite、データの挿入に使用できますか?

何かのようなもの:

$handle = @fopen("Test2.txt", "r");
if ($handle) 
{
    while (($buffer = fgets($handle, 4096)) !== false) 
    {
        if($buffer == "#?") {
            fseek($handle, -2, SEEK_CUR); // move back to before the '#?'
            fwrite($handle, 'I did it!');
            break; // quit the loop
        }
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}

免責事項:私は上記を試したことがないので、正確に機能させるために遊ぶ必要があるかもしれませんが、それは可能な解決策のように思われます(おそらく理想的な解決策ではありません!)

于 2012-11-22T17:22:16.627 に答える