Как определить номер строки, в которой есть строка в текстовом файле? - PullRequest
0 голосов
/ 10 ноября 2019

Я знаю, как искать, открывать и проверять, есть ли в файлах строку «test», но я не могу понять, как определить тест номер строки где «test" существует. (Или там, где он впервые существует, если есть несколько экземпляров.)

Мне это нужно, потому что мне наконец-то хватило тратить свое время на сочетание функции поиска в Notepad ++ и функции ужасного поиска в Windows, иВместо этого я решил сделать свой собственный, специально разработанный для моих нужд, что позволило бы мне искать как имена файлов, так и содержимое из всех мест, где мне нужно было искать сразу. И тогда он просто открывает найденные файлы и переходит прямо к правой строке. Это сэкономит так много времени, если я смогу заставить его работать. Сейчас я на последнем шаге.

1 Ответ

2 голосов
/ 10 ноября 2019

Предположим, что файл test.txt имеет следующее содержимое, а наша строка поиска имеет вид abc:

abc
def 
abc xyz
xyaabcdeejwgrf

Если вы хотите, чтобы результаты поиска были такими, как показано ниже, где abc даже в качестве подстроки, это хорошо:

abc was found at line 1
abc was found at line 3
abc was found at line 4

тогда мы могли бы просто перебирать строку файла за строкой, сохраняя счетчик номера строки, и печатать результаты.

<?php


$file_handler = fopen("test.txt","r");

if($file_handler === false){
    die("File doesn't exist!");
}

$search_str = "abc";
$line_no = 0;

while(!feof($file_handler)){
    $line_no++;
    $line = fgets($file_handler);
    if(strpos($line,$search_str) !== false) echo "$search_str was found at ",$line_no,PHP_EOL;
}

fclose($file_handler);

Если вы хотите, чтобы результаты поиска были точным соответствиемabc:

abc was found at line 1
abc was found at line 3

тогда мы могли бы сделать простое совпадение регулярных выражений с помощью границ слов \b.

<?php


$file_handler = fopen("test.txt","r");

if($file_handler === false){
    die("File doesn't exist!");
}

$search_str = "abc";
$line_no = 0;

while(!feof($file_handler)){
    $line_no++;
    $line = fgets($file_handler);
    if(preg_match('/\b'.$search_str.'\b/', $line) == 1) echo "$search_str was found at line ",$line_no,PHP_EOL;
}

fclose($file_handler);

Вы также можете добавитьbreak в цикле while, если вы хотите только первое вхождение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...