Отображение плоского текстового файла - PullRequest
1 голос
/ 10 октября 2011

В текстовом файле строки обнаруживаются \ n в конце каждой строки.Для этого необходимо прочитать весь файл, и это большая проблема для больших файлов (скажем, 2 ГБ).Я ищу метод для чтения одной строки без обхода всего файла (хотя я знаю, что это должен быть сложный процесс).

  1. Первый способ, который я знаю, - это использовать fseek () ссмещение;но это не практично.
  2. Создание плоского файла ключ / значение;но я не уверен, есть ли способ избежать загрузки всего в ОЗУ (это должно быть что-то вроде чтения массива в php).
  3. В качестве альтернативы, мы можем сделать некоторые числа в началекаждая строка для чтения.Я имею в виду, можно ли прочитать первые цифры в начале строки, пропустив содержимое строки (переходя к следующей строке).

    768| line content is here
    769| another line
    770| something
    

Если читается только перваяцифр, общее количество данных, которые следует прочитать, невелико даже для больших файлов.

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Вам нужно прочитать определенные строки, которые можно проиндексировать по номеру строки? Если это так, просто сделайте бинарный поиск. Прочитайте (скажем) 200 символов в середине файла, чтобы узнать номер строки. Затем повторите в любой из половинок, пока не дойдете до правильной линии.

0 голосов
/ 10 октября 2011

Я думаю, что нет простого способа сделать то, что вы хотите. Записи имеют переменную длину, и никакая длина не может быть определена заранее, верно?

Если файл всегда один и тот же (или, по крайней мере, не часто изменяется), я бы поместил его в базу данных или, по крайней мере, создал индексный файл (номер записи: смещение) и использовал бы эту функцию fseek ()

...