2010-06-27 3 views
1

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

Как говорится в названии, я хотел бы найти способ подсчета количества строк, содержащих указанную строку в файле, на PHP.

Я знаю, что могу просто открыть файл и пропустить все строки и посмотреть, что-либо соответствует, но это кажется громоздким. Есть ли способ лучше?

Для иллюстрации того, что я хочу сделать, вот как это может выглядеть с AWK:

awk '/KEYWORD/ {i++} END { print i }' FILE 

Спасибо!

ответ

1

Это едва кажется «громоздким» мне:

$c = 0; 
foreach(file($filename) as $line) 
    if (strpos($line, $str) !== false) ++$c; 

Вы можете быть в состоянии уйти с регулярным выражением, но если вы действительно хотите, чтобы сосчитать линии (в отличие от случаев), есть, конечно, не более чистым способом (с точки зрения краткости и ясности), чем вышеупомянутый метод.

Редактировать, за первый комментарий:

echo substr_count(file_get_contents($filename), $str); 

Это должно работать.

+0

Мне нужны строки, но формат файла будет таким, чтобы не было разницы, если я рассчитываю экземпляры. – houbysoft

+0

Тогда вы можете использовать 'substr_count()' или даже 'count (preg_match_all())' on 'file_get_contents()'. Все эти методы загружают весь файл в память, что не рекомендуется для больших файлов. – Matthew

+0

Изменен принятый ответ, поскольку редактирование еще проще, чем ответ dvcolgan. Благодарю. – houbysoft

0

Помните, что файл() будет задыхаться при запуске с глупыми огромными файлами, такими как 500 МБ +. Если это распространено в вашем веб-приложении, таком как многие одновременные пользователи, считающие огромные размеры файлов, это скажется на производительности.

Смежные вопросы