| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Быстрая загрузка текстового файла! |
| Автор: VAVII 28.2.2006, 10:39 |
| Приветствую! Возникла такая проблема: есть огромный текстовый файл размером 170 метров, требуется быстро загрузить его в память и отобразить! Если есть какие-нибудь мысли делитесь! Зарание благодарен! |
| Автор: Guedda 28.2.2006, 10:50 |
| Используй TFileStream. Это самый быстрый способ. |
| Автор: _hunter 28.2.2006, 11:52 |
| самый быстрый -- вообще-то отображение в память... + на вторую часть вопроса отвечать кто будет?.. VAVII, а ты уверен что тебе нужно отображать все 170 метров? кто их читать будет? |
| Автор: VAVII 28.2.2006, 19:23 |
| Для нагляднисти желательно отобразить все! |
| Автор: _hunter 28.2.2006, 19:36 |
| ну тогда бери и суй их в TListBox. ну лучше ( всетаки ) подумать нужно ли это и использовать тот же бокс, только виртуальный ( самому отрисовкой/вставкой данных заниматься ) -- тот же FileMon 100 тысяч строк за доли секунды показывает. |
| Автор: Guedda 28.2.2006, 21:44 |
| Все равно винда все 170 метров не засунет в память... Он ее запихнет в файл подкачки, и будет оттуда брать... А если хочешь, чтобы все в память закинулось, используй ассемблерные вставки |
| Автор: _hunter 1.3.2006, 11:18 |
| а файл подкачки это уже не память что-ли? + при наличии свободного места в оперативке именно туда мапа и отобразится. P.S. и чем тут помогут асм-вставки? |
| Автор: VAVII 1.3.2006, 17:00 |
| Примерчик бы не помешал! |
| Автор: _hunter 1.3.2006, 17:39 |
| примерчик чего? если виртуализации бокса -- поиск по слову lbVirtual |
| Автор: Dian 1.3.2006, 18:19 |
| Нужно читать файл по частям. Это будет самый быстрый вариант Если есть столько свободной памяти - то почему бы и нет |
| Автор: VAVII 1.3.2006, 19:15 |
| Примерчик загрузки файла через TFileStream! |
| Автор: _hunter 1.3.2006, 19:36 |
| загрузки куда? + идем в справку и читаем, читаем, ... |
| Автор: pmax 15.3.2006, 17:35 | ||||
У меня это реализовано примерно так:
Успехов! |
| Автор: Guedda 15.3.2006, 17:46 | ||
| И ты считаешь, что этот пример для загрузки при помощи TFileStream? Вот пример для этого:
|
| Автор: pmax 16.3.2006, 10:34 | ||
Нет, но для работы с текстовыми файлами удобнее пользоваться объектом TStrings... Правда не знаю какой объект быстрее TFileStream или TStrings, поверю Guedda. P.S. Файл размером 35 метров у меня загружается за 5 сек. (но я закачиваю не всю информацию файла). |
| Автор: Alexeis 16.3.2006, 10:54 |
| Можно попробовать закачивать файл вручную. По опыту знаю, что максимальная скорость загрузки достигается при загрузке данных блоками от 2х до 10 мБ |
| Автор: Демо 16.3.2006, 11:16 |
| И тот , другой используют одни и те же функции для чтения. Другое дело, что затем нужно с данными делать. >Автор. В случае, если достаточно памяти на компьютере, можно воспользоватся самым простым методом: 1. Весь текст загружаем в TStringList. 2. В TListBox отображаем(коипируем из TStringList только те строки, которые необходимы для отображения(т.е. используем метод движущегося фрейма). |
| Автор: pmax 16.3.2006, 12:53 | ||
Что то не понимаю, зачем их отображать в TListBox, почему нельзя их в массив откинуть и далее с ним работать? По моему так удобнее, или нет? |
| Автор: pmax 16.3.2006, 14:38 | ||
Не заметил. Просто у меня примерно такая же задача, только мне нужны определенные значения из файла, для последующей их обработки. |
| Автор: Демо 16.3.2006, 14:41 |
| Ну в твоем случае намного проще прочитать файл построчно и выбрать только те строки, которые нужны (ReadLn); |
| Автор: pmax 16.3.2006, 15:01 | ||
Строки то мне нужны все а вот информация из каждой строки нужна выборочная. Пример считываемого файла: File: C:\EMT-SW\EMT-SCUT\BRC339.AS4 > 00001 2003/12/10 - 10:45:02 SN:1485 SC:0150 CH:05 TG:32 ST:00 SA:00 >> Ch Flag: 0 0 0 0 0 BY:3 SR:00150 Cyc/Sec. CK:4 TE: 000000000uS. 1 527 1045 1551 -1498 -1283 2 769 833 2213 -1768 -1135 3 595 890 2211 -3115 -1013 4 366 945 2459 2533 -1200 5 800 800 2111 1466 -1007 6 746 799 1599 -2573 -778 7 511 906 1245 -1051 -743 8 679 851 741 -685 -611 9 895 789 909 -3835 -879 10 497 771 636 -3579 -857 11 582 852 -663 14 -483 И так 35Mb... |
| Автор: Демо 16.3.2006, 17:50 |
| Ну 35Мб в наше время - немного. |