Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.02;
Скачать: CL | DM;

Вниз

Чтение, просмотр файла, алгоритм.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
14-3073
J_S
2003-05-15 17:23
2003.06.02
Какие встречаются надписи на ценниках


1-2974
ArtemB
2003-05-21 13:15
2003.06.02
OnMouseMove


3-2797
yuribas
2003-05-14 08:24
2003.06.02
Компоненты для Oracle


14-3074
Edelweiss
2003-05-16 09:26
2003.06.02
Delphi & ArcView


4-3208
Andrej
2003-04-04 11:24
2003.06.02
Сlipboard