我试图搜索文本文件,如果一行包含我要更新整行的特定键ID,如果没有添加新行。
所以基于这个文本文件:
admin,1234,ID1345,NW
staff,1325,ID1001,NE
staff,2157,ID2003,SW
staff,8519,ID3001,NS
我想搜索ID1345
,然后只更新该行,其他行完全保持不变。如果没有行包含ID1345
,则在文本文件中添加一个新行。
到目前为止,我已经:
$search = 'ID1345';
$result = 'admin,6698,ID1345,OP';
$reading = fopen('myfile', 'r');
$writing = fopen('myfile.tmp', 'w');
$replaced = false;
while (!feof($reading)) {
$line = fgets($reading);
if (stristr($line, $search)) {
$line = "$result\n";
$replaced = true;
}
fputs($writing, $line);
}
if (!$replaced) fputs($writing, "$result\n");
fclose($reading); fclose($writing);
rename('myfile.tmp', 'myfile');
这似乎适用于查找和替换,但如果该行不存在,它会不断添加它。
我知道这是由于if (!$replaced)
行,但我不知道该怎么做。
上面的示例很小,但文件中可能有几千个条目..
由于
答案 0 :(得分:0)
function file_properties($fileProperties) {
$result = array();
$lines = split("\n", $fileProperties);
$key = "";
$isWaitingOtherLine = false;
foreach($lines as $i=>$line) {
if(empty($line) || (!$isWaitingOtherLine && strpos($line,"#") === 0)) continue;
if(!$isWaitingOtherLine) {
$key = substr($line,0,strpos($line,'='));
$value = substr($line,strpos($line,'=') + 1, strlen($line));
} else {
$value .= $line;
}
/* Check if ends with single '\' */
if(strrpos($value,"\\") === strlen($value)-strlen("\\")) {
$value = substr($value, 0, strlen($value)-1)."\n";
$isWaitingOtherLine = true;
} else {
$isWaitingOtherLine = false;
}
$result[$key] = $value;
unset($lines[$i]);
}
return $result;
}
这将读取和写入任何扩展名的文件,例如Laravel中的.env或Java中的任何* .properties