![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Newo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.12.2008 Репутация: нет Всего: нет |
Суть вот в чем: есть большой файл (может быть больше 10гб), состоит из небольших строчек (разделитель - #13#10), в среднем символов 50 каждая. В каждой строчке записана информация, которую нужно обрабатывать.
Подскажите, пожалуйста, наиболее разумный способ решения этой проблемы. 1. Обычное считывание текстового файла с помощью writeln невозможно, ибо такие большие файлы этим инструментом не поддерживаются. 2. Считать все в StringList нельзя, ибо нет так много памяти 3. Пробовал TJclAnsiMappedTextReader из Jedi Code Library, он тоже отказывается работать с такими большими файлами 4. Пока только мысль завести файловый поток, считывать string фиксированной длины, а из нее уже выделять строчки файла, ища #13#10. Но неудобно будет все это дело компоновать между собой Заранее спасибо. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
ну это смотря что нужно с ним потом делать. Если обработкуможно вести с более мелкими блоками, то можно читать string фиксированной длины, потом присваивать его TStringList.Text и работать с стринглистом.
-------------------- Обижено школьников: 8 |
|||
|
||||
Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Мне кажется, что для обработки таких больших текстовых файлов возможны 2 варианта - маппировать файл в память, и обрабатывать строки вручную, либо то же самое, но с TFileStream.
Впринципе, не так много писанины для этого. -------------------- |
|||
|
||||
Newo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.12.2008 Репутация: нет Всего: нет |
Да, обработка будет идти лишь по строчкам (которые между #13#10). Вашу мысль понял, спасибо Просто думал, есть более цивильный способ это дело реализовать ![]() |
|||
|
||||
Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Sample:
Добавлено через 1 минуту и 49 секунд Не перегружал Seek - подразумевается, что чтение идёт от начала файла непрерывно. Если нужны пробросы по файлу, то нужно перегружать Seek - в нём сбросить буфер на 0 |
||||
|
|||||
Newo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 24.12.2008 Репутация: нет Всего: нет |
Snowy, больше спасибо! Я, конечно, в конечном счете сам что-то подобное бы написал, но куда более сложно и громоздко
![]() Спасибо! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |