我有一个搜索文本文件的程序,看看该文件中是否有某个字符串,我已经可以正常工作了。我需要知道的是如何打印该文本文件的特定行。例如,如果文件在其自己的行中列出了三个街道名称,并且程序搜索其中一个,我希望它只打印出具有该街道名称的行。
如果文件看起来像这样:被搜索的单词是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 :(得分:1)
file_get_contents
和strpos
对文件句柄没有影响,因此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);
}