Форум: "Основная";
Текущий архив: 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.007 c