读取PHP文本文件的某些行

时间:2013-08-16 12:49:48

标签: php parsing fread

我必须为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

3 个答案:

答案 0 :(得分:2)

发现regular expressions

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");
    }
}    

这不是效率最高也不是最好的,但它起作用,这两个答案都帮助我搞清楚了。