Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-3205
Delphi5.01
2003-04-03 22:52
2003.06.02
PlgBlt ne rabotaet tak kak nujno, pochemu?


14-3128
sniknik
2003-05-14 16:29
2003.06.02
Веселая ошибка


14-3156
АлеКо
2003-05-15 03:53
2003.06.02
InstallShield


7-3185
Pavel111
2003-04-02 11:23
2003.06.02
Timer


1-2873
QUE
2003-05-22 14:29
2003.06.02
??? CreateParams ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский