@KuzmenkoArtem

Как прочитать определенную строку в файле?

Есть файл csv, т.к. он может быть великанским не хочу полностью считывать его.
Необходимо достать строку по номеру
Адекватного решения не нагуглил.

Спасибо!
  • Вопрос задан
  • 775 просмотров
Решения вопроса 1
DevMan
@DevMan
большой насколько?
если он не гигабайтный, нагрузки особой нет и запускается не на кофемолке, самое простое (простое, не оптимальное) – прочитать в массив при помощи file() и выбрать нужную строку по индексу.
иначе, потоковый разбор.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@rPman
Без полного чтения файла (хотя бы один раз, например построить индекс) до нужной строки, без знания о размерах этих строк - невозможно

Построить индекс очень просто - считываешь по строчке файл и после каждой запрашиваешь текущую позицию в файле, сохраняя полученные числа в массив, который сохраняешь и пользуешься. Для чтения в последствии достаточно сделать seek в нужную позицию.

p.s. если размер строк фиксированный, то само собой можно вычислить позицию в файле простым умножением номера на размер строки

p.p.s. если строка может быть приблизительной, то точно так же можно посчитать примерную длину строк в файле (сделав несколько чтений из разных частей файла и посчитав средний размер строк) и умножить ее на требуемую позицию, ошибка само собой будет уменьшаться в зависимости от распределения длин строк и количества проверочных чтений из файла для получения средней длины
Ответ написан
@Vitsliputsli
Для простых файлов csv можно воспользоваться командами ОС (в которых нет переносов строк внутри строки).
К примеру, у меня поиск 9 000 000 строки используя php занимает 31 секунду, а через sed менее чем за пол секунды.
Для сложных условий уже не такое большое различие.
Ответ написан
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы