![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка текстового файла [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).