поиск в большом файле

vtreertyu

Писатель
Регистрация
24 Янв 2011
Сообщения
7
Реакции
0
Есть текстовый файл 5.25 ГБ, в нем миллионы строк. Нужно средствами php найти все строки, которые содержат введенное мной слово и сохранить в отдельный файл найденный список строк. Пробовал просто читать, но выдает, что слишком большой файл
 
Надо открывать файл и читать блоками

Вот пример
PHP:
<?php
$handle = fopen("file.txt", "rb");
while (!feof($handle)) {
//читаем блок
  $content= fread($handle, 8192);
//обрабатываем его как хотим
}
fclose($handle);
 
благодарю, а что надо еще дописать в этот код, чтобы найти и сохранить в отдельный список все строки содержащие "искомое слово"
 
Надо поделить файл на много частей путем выпезания строк...
 
благодарю, а что надо еще дописать в этот код, чтобы найти и сохранить в отдельный список все строки содержащие "искомое слово"
_www.php.ru/manual/function.stripos.html
стандартный пример вполне поможет понять как модифицировать код.

Добавлено через 3 минуты
Надо открывать файл и читать блоками
$content= fread($handle, 8192);

В коде не учтены переходы строк, стоит использовать функцию fgets либо, читая посимвольно(fgetc) в буфер, искать символы окончания строк.
 
Проще в блоке найти последний символ окончания строки.
Например так
PHP:
$strings = explode("\n",$content);
ну а дальше работаем как с массивом.
Можно разбивать не по символу конца строки, а по символм окончания предложений (точка, !, ?,...).
Вариантов множество.

PS интересно где автор умудрился собрать такой огромный текстовый файл????!!!!
 
Проще в блоке найти последний символ окончания строки.
Например так
PHP:
$strings = explode("\n",$content);
ну а дальше работаем как с массивом.

Согласен с тем, что такой вариант существует. Но использовать его проблематично: в прочитанных байтах может быть несколько переносов строк - нужно делать цикл и проверять count() массива или не быть ни одного - придется делать объединения строк. Это усложнит код и внесет кучку дополнительных операций, которых можно было избежать.
В общем кучка не нужной работы...

Можно разбивать не по символу конца строки, а по символм окончания предложений (точка, !, ?,...).
Идея более здравая, но противоречит ТЗ.

PS интересно где автор умудрился собрать такой огромный текстовый файл????!!!!
Работаю сейчас с дампами, из которых списки доменов можно получить, 2GB текстовик вполне нормальный размер :)
 
Проще в блоке найти последний символ окончания строки.
Например так
PHP:
$strings = explode("\n",$content);
ну а дальше работаем как с массивом.
Можно разбивать не по символу конца строки, а по символм окончания предложений (точка, !, ?,...).
Вариантов множество.
PS интересно где автор умудрился собрать такой огромный текстовый файл????!!!!
Так конечно можно, но не с 5 ГБ файлом
Ну и автор указал что там построчно, тогда просто можно открыть
$content=file("file.txt"); Опять таки фаил слишокм большой.
Вариант Liver c небольшой поправкой
PHP:
$search_word="hello";
$handle = fopen("file.txt", "rb");
while (!feof($handle)) {
//читаем блок
  $content= fgets($handle);
	if (strrpos($content,$search_word))
		{
				$fp=fopen("result.txt","a+");
				fwrite($fp,"$content");
		}
}
fclose($fp);
fclose($handle);
 
Назад
Сверху