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

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

Обработка текстовых файлов больших размеров (2 - 3 ГГб) [D7, WinXP]


Страницы:   1 2

bsframer ©   (2006-04-26 08:59:00) 

Здраствуйте, Уважаемые. Может вопрос и глупый, но мучаюсь уже второй день. Есть текстовый файл большого размера (2-3 ГГб), строки порядка 200 символов. Вопрос, как можно провести в нем сортировку по возрастанию (убыванию)? Пробовал ReadLn, BlockRead, TFileStream - медленно (нужно чтоб 50 МГб примерно за 5 минут пробегало). Через TStringList можно (100 МГб - 2,5 минуты), но в него влазит порядка 500 МГб (Оперативки 1 ГГб), дальше сообщение Out of Memory и стопор. Разрезание файла на куски думал, но это геморойно. Слышал про FileMapping, но не знаю как с ним работать и подойдет ли он вообще. Может есть какой способ, чтоб оперативки меньше жрало и работало быстрее, или я не так пробовал?


bsframer   (2006-04-26 09:57:00) [21]

Еще с собой Оракл таскать, нет уж увольте.


ANB   (2006-04-26 09:54:00) [22]


> bsframer   (26.04.06 09:52) [9]

1. Самая доступная - FB или IB
2. Самая навороченная - Оракл - там можно вообще все на PL/SQL написать, он с файлами работать умеет и довольно шустро.


ANB   (2006-04-26 09:52:00) [23]


> СУБД можно, но не нужно. Нужно именно стандартными стредствами
> Delphi или WinAPI

Ну прям как у нас на флоте :

- Бери лом и мети плац
- А можно я метлу возьму - будет быстрее и чище
- А мне не надо, чтобы было быстрее и чище, мне надо чтобы ты за<Удалено модератором>

Вам шашечки или ехать ?
Самый быстрый способ (если уж в файле все надо хранить) :
1. Загрузить все в таблицу БД
2. Проиндексировать
3. Выгрузить обратно в файл


bsframer   (2006-04-26 09:52:00) [24]

Хорошо, а какая СУБД наиболее подходящая, для решения данной задачи. Просто я использовал импорт в mdb с последующим экспортом обратно. Сортировка файла 1 ГГб заняла примерно 10 часов.


Сергей М.   (2006-04-26 09:48:00) [25]


> bsframer   (26.04.06 09:16) [3]
>
> СУБД можно, но не нужно


Тогда тебе придется изобрести еще один велосипед.
Индексы так или иначе придется строить, но в случае с СУБД нет необходимости реализовывать механизм индексации - он там уже реализован.


bsframer   (2006-04-26 09:39:00) [26]

Спасибо, уже Кнута изучаю


TUser   (2006-04-26 09:31:00) [27]

> Разрезание файла на куски думал, но это геморойно.

Смотри на алгоритмы внешней сортировки. От предков с гораздо меньшими ОЗУ, чем у тебя, много осталось. Например, в книге Вирта описаны, ад и много где еще.


bsframer   (2006-04-26 09:30:00) [28]

А это где?


Anatoly Podgoretsky   (2006-04-26 09:21:00) [29]

Стандартных средств Дельфи и WinAPI нет.
У Кнута хорошо расписаны различные алгоритмы сортировка, аж целый толстенный том.


bsframer   (2006-04-26 09:16:00) [30]

СУБД можно, но не нужно. Нужно именно стандартными стредствами Delphi или WinAPI


Сергей М.   (2006-04-26 09:09:00) [31]

Воспользуйся готовой СУБД.


MBo   (2006-04-26 09:05:00) [32]

Нужно почитать о внешней сортировке.
Простая - слиянием, но для нее требуется дополнительное место (размер файла)


Страницы:   1 2

Наверх

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