2017-04-20 28 views
0

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

如果该文件是这样的:与被搜索的词是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. 
} 
+0

你可以使用正则表达式。也许像https://regex101.com/r/xwzlgZ/2/...这样的东西,或者你可以使用'strpos'和'substr',但是你不知道它是否与它部分匹配。 – chris85

回答

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

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

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

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

如果该文件是非常大的,这是比使用file_get_contents,因为它不必将整个文件读入内存,然后创建一个巨大的所有线阵列的解决方案更好。

相关问题