读取文件直到达到char然后用PHP编写

时间:2012-11-22 17:11:15

标签: php file

嗨,这是我的问题,我想从文件中读取,直到我到达一个特定的字符然后在一个新的行中写一个字符串在那个特定的字符与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);
}

2 个答案:

答案 0 :(得分: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

未测试上述代码 - 可能需要调整。

答案 1 :(得分:0)

既然你知道你的标记,你可以利用fseek倒回一些字节(设置为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);
}

免责声明:我没有尝试上述内容,因此您可能需要努力让它完全正常工作,但这似乎是一种可能的解决方案(尽管可能不是理想的解决方案!)