Russian Qt Forum
Ноябрь 01, 2024, 02:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как произвести сортировку строк большого файла  (Прочитано 5571 раз)
kvrus
Гость
« : Июнь 09, 2012, 15:12 »

Есть лог файл с датами и сообщениями очень большого размера (~1Гб). Как сделать сортировку
строчек? как то можно его по частям проверять?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Июнь 09, 2012, 15:24 »

Есть лог файл с датами и сообщениями очень большого размера (~1Гб). Как сделать сортировку
строчек? как то можно его по частям проверять?
Выбираете дату "медиану". Создаете 2 файла, в первый пишете все строки меньше медианы, во второй - все что больше. Если получившиеся куски еще слишком велики - делите их рекурсивно. Потом сортируете каждый кусок в памяти и пишете все сортированные куски в новый файл. Возможна ситуация когда память есть (напр 2 Gb) но выделить слишком большой блок все равно не удается - это нормально.

Есть способ и проще

Код
C++ (Qt)
struct CLine {
QDate mDate;
qint64 mFilePos;
};
 
Создаете контейнер таких, сортируете и потом собираете делая seek. Писать меньше но тут предполагается что контейнер влезет в память
« Последнее редактирование: Июнь 09, 2012, 15:29 от Igors » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Июнь 09, 2012, 15:26 »

Если нет запрета на использование промежуточных файлов, то делайте merge sort.
То есть читаете блок записей, сортируете и сбрасываете результат во временный файл. Потом полученные файлы вместе объединяете сразу все вместе или группами (обычно попарно).
Записан
SimpleSunny
Гость
« Ответ #3 : Июнь 10, 2012, 12:59 »

"внешняя сортировка" -> google
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Июнь 10, 2012, 13:48 »

Если уж налицо виртуозное владение гуглой, то позвольте спросить. Вот пишут
Цитировать
Сортируемый массив разбивается на две части примерно одинакового размера;
А как это сделать?

Спасибо
Записан
SimpleSunny
Гость
« Ответ #5 : Июнь 10, 2012, 14:50 »

Если уж налицо виртуозное владение гуглой, то позвольте спросить. Вот пишут
Цитировать
Сортируемый массив разбивается на две части примерно одинакового размера;
А как это сделать?

Спасибо

Кто где пишет?
Внешняя сортировка - это только название класса алгоритмов, далее уже выбирается подходящий под свои нужды.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Июнь 10, 2012, 15:19 »

Кто где пишет?
В авторитетном источнике "Википедия", эту ссылку рекомендовал LisandreL
http://ru.wikipedia.org/wiki/%D1%EE%F0%F2%E8%F0%EE%E2%EA%E0_%F1%EB%E8%FF%ED%E8%E5%EC
Там и мувики есть
Записан
SimpleSunny
Гость
« Ответ #7 : Июнь 10, 2012, 20:01 »

Ссылка LisandreL не совсем уместна в данном контексте, так как там рассказыватся про алгоритм сортировки слияниям, а не про слияние отсортированных файлов.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.138 секунд. Запросов: 23.