Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Вниз

Загрузка текстового файла   Найти похожие ветки 

 
SI-riuss   (2002-12-29 22:27) [0]

Требуется загрузить текстовый файл в Memo, но файл может быть достаточно большим. Как загрузить лишь часть файла?


 
Юрий Зотов   (2002-12-29 22:36) [1]

Читать его построчно (ReadLn) и построчно добавлять (Add).


 
SI-riuss   (2002-12-29 22:45) [2]

Можно пример. Например загрузить в Edit 6ю строчку из файла.


 
Anatoly Podgoretsky   (2002-12-29 23:12) [3]

В цикле конечно, пока не прочитаешь 6 строку


 
Юрий Зотов   (2002-12-29 23:22) [4]

Пример из хелпа:

var
F: TextFile;
S: string;
begin
if OpenDialog1.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
Reset(F);
Readln(F, S);
Edit1.Text := S;
CloseFile(F);
end;
end;

Это чтение 1-й строки. Добавляем цикл от 1 до 6 - и, как сказал Анатолий, получаем 6-ю строку.


 
SI-riuss   (2002-12-29 23:35) [5]

Тогда следуют 2 вопроса:
1) Файл состоит из полутора тысячи строк. Сколько займет времени загрузить строку №1500?
2) Будет ли это быстрее, чем загрузить весь файл в, скажем, Memo, а затем прочесть Memo1.Lines[1500]?


 
Anatoly Podgoretsky   (2002-12-29 23:44) [6]

Весь файл ты в Memo не загрузишь, надо использовать TRichEdit
Чтение с помощью ReadLn очень быстрое, зависит от скорости дисков и мощности компьютера, от первого особенно. На моем компьютере порядка 100000 строк в секунду, примерно 10 мб.
На современных ееще быстрее.

Если же грузить весь фафл в память (конечно не в TMemo/TRichEdit, а в TStringList) потребует многократного выделения ресурсов и довольно больших объемов

Тебе просто надо проверить оба варианта с измерением времени на них и тебе сразу станет понятно. Вариант со TStringList удобен если надо обрабатывать весь файл и записывать результат обработки обратно.


 
SI-riuss   (2002-12-29 23:49) [7]

А кстати, какой лимит емкости для Memo и RichEdit?


 
Юрий Зотов   (2002-12-29 23:55) [8]

Думаю, чтение ЧАСТИ файла будет в любом случае быстрее, чем чтение ВСЕГО файла. Да еше в варианте с TStringList идут затраты времени на многократное выделение памяти, на поиск и выдачу N-й строки... да и вообще, просто зазря гробятся ресурсы.


 
SI-riuss   (2002-12-30 00:16) [9]

Еще варианты:
Читая строки методом ReadLn я нашел нужную на строке, допустим, 100. Как мне опять начать просчет сначала?
Если мне придется по сотни раз искать нужную строку, то наверно лучше один раз загрузить все и обращаться уже к оперативке.


 
Юрий Зотов   (2002-12-30 00:48) [10]

Это уже зависит от особенностей задачи. Если придется часто прогонять поиск, то, возможно, есть смысл загрузить и весь файл.


 
SI-riuss   (2002-12-30 00:54) [11]

А про лимит емкости для Memo и RichEdit никто не знает?


 
[NIKEL]   (2002-12-30 05:44) [12]

у рича нету лимита

Вот интересно как делает Windows Comander со своим просмотром F3
- там хоть какой файл открывай - все равно будет быстро и прокручиваться и смотреться, наверно там File Mapping и он напрямую отображает память на облость просмотра


 
Anatoly Podgoretsky   (2002-12-30 07:38) [13]

TMemo 64 на Win9x и 2 gb Win9x/NT

RichEdit 2 gb


 
Anatoly Podgoretsky   (2002-12-30 07:45) [14]

64 кб, но эти органы для визуализации, а не для поисков и тому подобное


 
Verg   (2002-12-30 12:16) [15]

Если про макс. скорость, то я бы file mapping-ом делал. Быстрее не выйдет. Но у маппинга тоже ограничение - <4Gb, не так ли? ;)

А проги типа Viewer-ов грузят частями, например, по 25 строк. Создают как бы "скользящее окно" на 25 строк.


 
Кулюкин Олег   (2002-12-30 13:42) [16]

А нельзя читать в TStringList?
А там уже искать нжные строки?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
4-37425
Cosmic
2002-11-23 21:01
2003.01.13
Как добавить пункт в ListBox?


4-37448
Lony
2002-11-24 20:38
2003.01.13
CreateThread


1-37192
ed30
2002-12-30 18:41
2003.01.13
Потоки


1-37039
adolf_99
2003-01-02 15:36
2003.01.13
Помогите


3-36955
Mr.Hunter
2002-12-18 09:10
2003.01.13
Быть InterBase или не быть, вот в чем вопрос!





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