2017-04-20 4 views
0

텍스트 파일을 검색하여 특정 문자열이 해당 파일에 있는지 확인합니다.이 파일은 정상적으로 작동합니다. 내가 알아야 할 것은 텍스트 파일의 특정 줄을 인쇄하는 방법이다. 예를 들어 파일에 3 개의 거리 이름이 각자의 줄에 나열되어 있고 프로그램에서 그 중 하나를 검색하는 경우 해당 거리 이름이있는 줄만 인쇄 할 수 있습니다. 텍스트 파일의 특정 줄을 어떻게 인쇄합니까?

파일이 닮은 경우 : 단어는 나는 단지이가에 있는지 확인하는, 내가 지금까지 무엇을 가지고 6784 Rose Road

4543 Drock Drive 
1254 HeadHill Road 
6784 Rose Road 

인쇄로 원하는이었다 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를 사용하는 솔루션보다 낫다.

관련 문제