Быстрая реализация сортировки и удаления дубликатов строк в csv/txt(ANSI) файлах (WinAPI + С++)
Запись от bedvit размещена 03.07.2020 в 16:07
Показов 2913
Комментарии 0
|
Реализация для XLL как функция COM. Реализация в СОМ. Часть библиотеки BedvitCOM Сортировка и удаление (опционально) в .txt-файле размером 1Гб, 4 млн. строк. = Потребление памяти: размер файла + (от 4Кб*5 до 16Мб*2) (в зависимости от размера файла, на буферы и сортировку) Алгоритм оптимизирован на большие файлы. Есть возможность уменьшить еще выделение памяти, но с ущербом для производительности. Особенности: 1.WinAPI: CreateFile + ReadFile 2.Асинхронность в чтения с диска и выполнения рабочего кода. 3.Возможность отключения системного кеширования. 4.Кодировка csv/txt - ANSI 5.Размер файла ограничен выделяемой памятью (ОЗУ+Файл подкачки) 6.Параллельный алгоритм сортировки concurrency::parallel_buffered_sort 7.Бинарное сравнение символов (strcmp). Бинарное сравнение быстрее в разы, чем сравнение по локальным правилам. 8.Функция возвращает итоговое количество строк записанное в итоговый файл. 9.Поддерживается Стандарт RFC 4180 СОМ функция: [id(13), helpstring("Sort and Delete Duplicates Rows CSV-file encoded ANSI")] HRESULT SortDeleteDuplicateRowsCSVansi ([in] BSTR FileIn, [in] BSTR FileOut, [in, defaultvalue(0)] LONG HeaderRowsCount, [in, defaultvalue(0)] LONG OnlySort, [in, defaultvalue(0)] LONG SortOrder, [in, defaultvalue(0)] LONG FileFlagNoBuffering, [in, defaultvalue(0)] LONG SetLocale, [in, defaultvalue(L"")] BSTR Locale, [out, retval] LONG* RowsCountOut); 1.FileIn - файл исходный (обязательный) 2.FileOut - файл итоговый (обязательный), может быть = FileIn, данная ситуация обрабатывается правильно (начиная с версии v1.0.2.9) 3.HeaderRowsCount - количество строк заголовка (по умолчанию: 0) 4.OnlySort - только сортировка 0/1 (по умолчанию: 0 - сортировка+удаление дубликатов строк) 5.SortOrder - порядок сортировки 0/1 (по умолчанию: 0 - по возрастанию) 6.FileFlagNoBuffering - отключение системного кеширования чтения/записи файла 0/1 (по умолчанию: 0 - кеширование не отключается)(начиная с версии v1.0.2.9) Использование в случаях, когда размер файла сравним с размером ОЗУ (не создается доп. буфера файловой системы, за счет чего меньше пишется в файл подкачки и в разы быстрее выполняется код). 7.SetLocale - включить локальные настройки для сортировки 0/1 (по умолчанию: 0 - не включены, бинарное сравнение) 8.Locale - при включенном параметре SetLocale (1), задает локаль (Language tag). (по умолчанию: "" (пусто) - текущей локальные настройки, к примеру для России "ru-RU") Весь список см. по ссылке: https://docs.microsoft.com/en-... 1a8b0cdb9c 9.RowsCountOut - Возвращает количество строк в итоговом файле, с учетом количества строк заголовка (возвращаемое значение) Запуск из VBA
| ||||||||||
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии


