Intereting Posts
Углубленное объяснение уровней Store / Store / веб-сайта Magento? Я имею зашифрованный пароль md5, как дать пароль пользователю, когда он использует «Забыли пароль»? Высокие значения круговых диаграмм HighCharts X-axies не отображаются при попытке получить данные из базы данных MySQL с помощью PHP Как ограничить размер файла загрузки файлов в PHP? file_get_contents () PHP Библиотека PHP со странами, государствами и городами ajax показывать содержимое mysql один раз PHP & Sessions: есть ли способ отключить блокировку сеанса PHP? Платежи PayPal нескольким получателям. Адаптивные платежи? Использование объектов в Ajax вызывает PHP-файлы Как бороться с локализацией? Есть ли стандарт, которому я должен следовать? Выбор строк, где поле имеет нулевое значение, используя подготовленные инструкции PHP PDO и MySQL woocommerce показать только родительскую категорию (taxonomy-product_cat.php) Пропуск через массивы ввода формы в php Диапазон HTTP, потоковая передача, музыка и аудио

Как читать только части текстового файла?

У меня есть PHP-скрипт, который много работает с большими текстовыми файлами, в основном с файлами журналов. Проблема в том, что большую часть времени я хочу только часть ее, от одной точки разделения до другой. Но для чтения текстового файла объемом 2 ГБ только для получения небольшой порции это замедляет процесс.

Есть ли способ читать только части текста без необходимости читать весь файл в памяти?

Данные хранятся следующим образом:

|18.05.2013: some log info here... |19.05.2013: some log info here... |20.05.2013: some log info here... |21.05.2013: some log info here... |22.05.2013: some log info here... | etc... 

Поэтому, если бы я хотел только «19.05.2012», мне все равно пришлось бы прочитать и весь другой текст. Есть ли способ читать только эту часть?

PS База данных не является опцией, разделение файлов на более мелкие файлы также нецелесообразно.

Solutions Collecting From Web of "Как читать только части текстового файла?"

Я думаю, вы ищете fseek .

Тем не менее, вам нужно будет форматировать свои данные таким образом, чтобы Xth-символ стал началом Y-данных. Практически, если каждый журнал может иметь одинаковую длину, это может быть эффективным способом. В противном случае вам все равно нужно прочитать все строки, чтобы их найти.

Представим себе (непроверенный, но только для того, чтобы вы начали):

 function getDataFromFile($fileName, $start, $length) { $f_handle = fopen($filename, 'r'); fseek($f_handle, $start); $str = fgets($length); fclose($f_handle); return $str; } 

Затем:

 $fname='myfile.txt'; $DATA_LENGTH = 50; $wanted_data = 12; $data = getDataFromFile($fname, $DATA_LENGTH*$wanted_data, $DATA_LENGTH); 

Надеюсь, это поможет.