Как работает программа просмотра больших текстовых файлов? Как построить большой текстовый ридер - PullRequest
2 голосов
/ 27 апреля 2010

как программа просмотра больших текстовых файлов работает ?

Я предполагаю, что:

  • Threading используется для обработки файла
  • TextBox обновляется построчно
  • Эффективная обработка памяти используется

Верны ли эти предположения? если кто-то должен был развивать свои собственные, что нужно делать, а что нет?

Я хочу реализовать один, используя DataGrid вместо TextBox

Мне комфортно с C ++ и python. Я, вероятно, буду использовать QT / PyQT

EDIT

Файлы, которые у меня есть, обычно имеют размер от 1,5 до 2 ГБ. Я смотрю на редактирование и просмотр этих файлов

Ответы [ 2 ]

6 голосов
/ 27 апреля 2010

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

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

4 голосов
/ 27 апреля 2010

В классической (античной?) Книге Кернигана и Плаугера "Программные инструменты на Паскале" они описывают варианты разработки и дизайна версии ed (1) и примечания

"Предупреждение: edit большой программа (исключая взносы от translit, find и change; в 950 строк, это на пятьдесят процентов больше чем что-либо еще в этой книге. "

И у них (буквально) даже не было строковых типов для использования. Поскольку они отмечают, что редактируемый файл может существовать на ленте , которая не поддерживает произвольные записи в середине, им пришлось хранить индекс позиций строк в памяти и работать с пустым файлом для сохранения изменений , удаления и добавления, объединяя все вместе по команде «сохранить». Они, как и вы, были обеспокоены тем, что память ограничивает размер редактируемого файла.

Общая структура этого подхода сохраняется в GNU ed , особенно в buffer.c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...