Главная страница
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.018 c
14-3133
Drin
2003-05-12 03:01
2003.06.02
Вопрос к любителям современной музыки


1-3007
Dead
2003-05-20 23:04
2003.06.02
SynEdit и иже с ним


1-2843
Vladimir1
2003-05-21 09:14
2003.06.02
Программная задержка


14-3060
Knight
2003-05-08 09:43
2003.06.02
9 МАЯ


7-3191
Сергей
2003-04-01 09:46
2003.06.02
Как отключить/включить устройство?