Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загрузка текстового файла [D4, WinXP]


SI-riuss ©   (2002-12-29 22:27:00) 

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


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

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


Verg   (2002-12-30 12:16:00) [2]

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

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


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

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


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

TMemo 64 на Win9x и 2 gb Win9x/NT

RichEdit 2 gb


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

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

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


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

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


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

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


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

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


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

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


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

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


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

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

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

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


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

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


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

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

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-ю строку.


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

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


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо