Главная страница
    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
1-2884
sapsi
2003-05-22 11:53
2003.06.02
Рисование из другог потока


3-2807
borg
2003-05-13 09:03
2003.06.02
Упаковка файлов DBF


1-2886
123456
2003-05-22 16:36
2003.06.02
ShellExecute


1-2914
Xitrik
2003-05-23 06:06
2003.06.02
Как из проги удалить саму себя? Заренее спасиба:о)


1-2951
Антон Бобиков
2003-05-20 22:24
2003.06.02
Создание компонента





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский