如何打印文本文件的特定行?

时间:2017-04-20 22:09:39

标签: php

我有一个搜索文本文件的程序,看看该文件中是否有某个字符串,我已经可以正常工作了。我需要知道的是如何打印该文本文件的特定行。例如,如果文件在其自己的行中列出了三个街道名称,并且程序搜索其中一个,我希望它只打印出具有该街道名称的行。

如果文件看起来像这样:被搜索的单词是Rose Road, 我希望它只打印6784 Rose Road

4543 Drock Drive
1254 HeadHill Road
6784 Rose Road

这是我到目前为止所做的,它检查它是否在文件中,但我只是不确定如何打印出特定的行。

$roadName = "Rose";
$handle = fopen("streets.txt", "r");
if(strpos(file_get_contents("streets.txt"),$roadName) !== false) //Checks to make sure its in the file.
{
    echo fgets($handle); //This is what I was trying, but it only prints the 1st line.
}

2 个答案:

答案 0 :(得分:1)

file_get_contentsstrpos对文件句柄没有影响,因此fgets只是从文件的开头读取。

您可以使用fgets读取每一行,测试它是否与字符串匹配,然后打印出来。

while ($line = fgets($handler)) {
    if (strpos($line, $roadName) !== false) {
        echo $line;
        break;
    }
}

如果文件非常大,这比使用file_get_contents的解决方案更好,因为它不必将整个文件读入内存,然后创建所有行的大量数组。

答案 1 :(得分:0)

我会将这些行分解成一个数组并检查每一行:

$roadName = "Rose";
$file=file_get_contents("streets.txt")
if(strpos($file,$roadName) !== false) //Checks to make sure its in the file.
{
  $lines = explode(PHP_EOL,$file);
  foreach($lines as $line) {
    if (strpos($line,$roadName) !== false) echo($line);
}