我必须为txt文件编写一个解析器,其结构如下:
exampleOfSomething:95428,anotherExample:129,youNeedThis:491,\ n
另一个例子:30219,exampleOfSomething:4998,youNeedThis:492,
但是有一个主要问题 - 比如示例 - 文件并不总是以一个顺序出现,有时我会在“anotherExample”等之前得到“youNeedThis”,但结构
{variable}:{value},
总是一样的。我知道我在寻找什么(即我只想阅读“anotherExample”的值)。当我得到这个数字时,我希望它将它写在一些单独的行中的txt文件中:
129
30219
到目前为止,我已经将文件中的每个数字写在单独的行中,但我必须将它们过滤掉才能包含我正在寻找的那些数字。有没有办法过滤这个,而不必做这样的事情:
$c = 0;
if (fread($file, 1) == "a" && $c == 0) $c++;
if (fread($file, 1) == "n" && $c == 1) $c++;
if (fread($file, 1) == "o" && $c == 2) $c++;
// And here after I check if this is correct line, I take the number and write the rest of it to output.txt
答案 0 :(得分:2)
preg_match_all('/anotherExample\:\s*([0-9]+)/sm', file_get_contents('input.txt'), $rgMatches);
file_put_contents('output.txt', join(PHP_EOL, $rgMatches[1]));
答案 1 :(得分:1)
这样的事情怎么样:
<?php
$data = file_get_contents($filename);
$entries = explode(",", $data);
foreach($entries as $entry) {
if(strpos($entry, "anotherExample") === 0) {
//Split the entry into label and value, then print the value.
}
}
?>
您可能希望做一些比explode
更强大的内容来获取$entries
,例如preg_split
。
答案 2 :(得分:0)
我用这个解决了它:
$fileHandlerInput = file_get_contents($fileNameInput);
$rows = explode (",", $fileHandlerInput);
foreach($rows as $row) {
$output = explode(":", $row);
if (preg_match($txtTemplate, trim($output[0]))) {
fwrite($fileHandlerOutput[0], trim($output[1])."\r");
}
}
这不是效率最高也不是最好的,但它起作用,这两个答案都帮助我搞清楚了。