Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
ВнизЧтение, просмотр файла, алгоритм. Найти похожие ветки
← →
NewN (2003-05-22 10:18) [0]Здравствуйте, Мастера!
Необходимо реализовать средство просмотра текстового(или любого) файла размером ~?Мб. Стандартные компоненты, Tstrings.LoadFromFile не подходят - файл должен считываться только по мере необходимости отображения.
Условия: перенос строк - новая строка(после символа новой строки) должна отображаться с начала новой строки. Если количество символов в строке больше длины строки - то следующие символы тоже отображаются с новой строки. Быстрый переход в указанную %позицию (по перемещению ползунка ScrollBar).
Проблема с алгоритмом: определить позицию байта в файле, начиная с которой необходимо отображать файл (номер самого первого байта в первой видимой строке окна просмотра), после перемещения ползунка прокрутки. Я бы посчитал, что это невозможно, но это реализовано в просмотрщиках (Например F3 в Windows Commander). Интересно как?
← →
Palladin (2003-05-22 10:53) [1]зведи переменную текущей позиции в файле и вперед...
← →
NewN (2003-05-22 11:19) [2]- да вот, не получается так быстро :(.
Сначала всё кажется просто. Очевидно, если поблизости от этой позиции есть символ перевода каретки, необходимо встать на первый символ после неё. А если нет, тогда эта позиция должна быть относительно предыдущего перевода строки кратной длине строки (или относительно начала файла, если перевода строки нет вообще). И получается, что может потребоваться чтение всего файла, или очень больших его кусков для поиска предыдущего перевода строки, а это очень долго работает. Нельзя ли побыстрее, ведь каким-то образом все просмотрщики моментально переходят хоть в конец файла, хоть в середину, независимо от содержания.
← →
Palladin (2003-05-22 11:26) [3]читай с запасом и сверху и снизу...
← →
clickmaker (2003-05-22 12:35) [4]Определил кол-во видимых байт (страница) - прочитал.
Прокрутил - прочитал страницу до и после новой позиции ("с запасом") - отобразил N видимых байт. Не думаю, что это будет долго
← →
NewN (2003-05-22 12:43) [5]Вверх необходимо прочитывать не просто с запасом, а до тех пор, пока не встретится перевод строки, вот что меня и смущает, где может быть долго. Или я что то не понимаю.
← →
Palladin (2003-05-22 12:45) [6]
> NewN © (22.05.03 12:43)
парень, ну а что ты хотел?
ну перед просмотром пробегись по просматриваемому файлу и составь индекс строк! и потом вместо того что бы читать назад до перевода, сразуй перейди по уже найденой ранее позиции...
← →
NewN (2003-05-22 13:23) [7]>Palladin © (22.05.03 12:45)
Нет, индексом по всему файлу бегать перед открытием, ещё хуже. Это же весь файл придётся считывать, равно как каждый байт проверять. Понятно, я наверно хочу невозможного, просто увидел - F3 в Windows Commander как то это же делает, иначе бы и вопроса не было.
← →
Palladin (2003-05-22 13:28) [8]лично я бы читал назад блоками и парсил на предмет новой строки, как однажды MBo привел здесь процедурку, если хочешь можешь и сам реализовать такое, быстро и надежно...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c