Библиотека COM (OLE Automation). Часть 1 - ArraySort (String)
Запись от bedvit размещена 13.11.2018 в 21:46
Показов 5882
Комментарии 12
Теперь часть библиотеки BedvitCOM. См. Часть 2. Решил запустить пробный шар, и если будет время и интерес к данной тематике, возможно сделаю что-то годное в своих COM и XLL библиотеках. Цель - скорость и удобство работы, создание для скриптовых языков, языков с поддержкой COM - того, чего там нет или есть, но хочется лучше. В данном момент ориентир на VBA. Добавил новый класс - "VBA" к двум уже существующим (см. ссылку выше). Добавил новый метод - "ArraySortS" - сортировка данных (String) в одномерном/двухмерном массиве. С выводом индексов, сортировка возможна практически в любой размерности, если сортировать по первым двум измерениям) + удаление дубликатов. COM упакована в XLL (распаковывается и регистрируется автоматом). Открываем XLL, пишем код в VBA - пользуемся. 26/11/2018 - Обновления функционала: 1.Сортировка одномерных и двухмерных массивов 2.Удаление дубликатов в одномерных массивах 3.Вывод по одномерному и двухмерному массивам индексов по строкам или столбцам. 4.Сортировка по столбцам, строкам, целому массиву с выводом строки/столбцы, столбцы/строки. 5.Сортировка по 3 ключам (столбцам, строкам) 6.Размерность массива может быть любой, в т.ч. и с минусовых значений -5+0+5... и т.д. (вывод индексов в такой же размерности) 7.Обработка NULL - строк (перемещение на последние позиции) 8.Использованы параллельные алгоритмы сортировки. (библиотеки PPL, костыли не прикручивал) Интерфейс класса:
1.array_in_out - указатель на массив (ввод/вывод) 2.sort_order - порядок сортировки : 0-по возрастанию, 1-по убыванию 3.key_1 - ключи сортировки (порядковый номер столбца/строки, начиная с 1) по умолчанию - первый столбец/строка 4.key_2 5.key_3 6.sort_orientation - ориентация сортировки (0 - по строкам, 1 - по столбцам, 2- целый массив вывод строка-столбец, 3- целый массив вывод столбец-строка) 7.delete_duplicates - удаляем дубликаты (в одномерных массивах) 8.out_array_index - выводим индексы, "булево" 1/0 (тогда основной массив array_in_out - не меняется, выводятся данные в index_array_out ) 9.index_array_out - одномерный массив с индексами (с учетом всех ключей), если задан out_array_index=1 Все параметры метода, кроме входящего массива - опциональные (с значениями по умолчанию - 0 (ключи-1)) Метод "ArraySortS" работает через Variant, т.к. на некоторых скриптовых языках SAFEARRAY ходит через границы COM, только в обертке VARIANT (без изобретения костылей). Пример тестирования и использования в VBA (элементарно через CreateObject("BedvitCOM.VBA")): Кликните здесь для просмотра всего текста
Результаты на 2-х млн. строк и 4-м столбцам: Алгоритмы в VBA (быстрейшее решения, для сравнения): QuickSort на VBA (простая сортировка одномерного массива) -6.8 сек. Кликните здесь для просмотра всего текста
Метод ArraySortS из класса BedvitCOM.VBA (тестовый стенд: ЦП-QuadCore Intel Core i7-3770, ОЗУ-16ГБ (DDR3-1600 DDR3 SDRAM), WIN7x64, MS Office2016x64): Простая сорт. 1х массива, по возрастанию (по умолч.): 0,21875 сек. Простая сорт.по убыванию 1x массива с удалением-34,5385136537159%: 0,3515625 сек. Вывод индексов для 1х массива, сортировка по убыванию:0,2460938 сек. Сортировка всего 2х массива - вывод строка-столбец: 1,75 сек. Сортировка всего 2х массива - вывод столбец-строка 1,78125 сек. Простая сортировка 2х массива: 0,390625 сек. Вывод индексов для 2х массива, по указанному столбцу: 0,28125 сек. Сортировка 2х массива по 5му столбцу: 0,05078125 сек. Вывод индексов для 2х массива, по 8й строке: 0 сек. Сортировка 2х массива по 8й строке: 0,05078125 сек. Вывод индексов для 2х массива, по 1,2,3му столбцу: 1,484375 сек. Сортировка 2х массива по 1,2,3му столбцу: 1,519531 сек. Вывод индексов для 8,9,10й строке: 0 сек. Сортировка 2х массива по 8,9,10й строке: 0,05078125E сек. 18/02/2018 - добавил СОМ-библиотеки Для возможности использовать данную сортировку в СОМ-поддерживающих программах. Регистрация COM реализовано как под админом, так и под пользователем (актуально в офисной части клиентов) Регистрация стандартная: Админ: Regsvr32 "FullName.DLL" !ПОМНИМ! В Win10 регистрация под правами админа: "правая кнопка" - "Пуск" -"Командная строка (администратор)" Пользователь: Regsvr32 /i /n "FullName.DLL" Удалить из реестра: Regsvr32 /u "FullName.DLL" Последние версии библиотек. |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 12
Комментарии
-
Запись от bedvit размещена 27.11.2018 в 09:08 -
подскажите, как сделать, чтобы в Ворде тоже работало? пока ошибку выдает на строке
спсVisual Basic 1
Set bVBA = CreateObject("BedvitCOM.VBA")
Запись от Ципихович Эндрю размещена 04.01.2019 в 09:50 -
Ципихович Эндрю, извините что с опозданием, дела не ждут, редко бываю. По вашему вопросу - для того, что бы использовать эту библиотеку в VBA (Word ), ее нужно зарегистрировать. И все заработает ) просто в Excel за вас это делает .xll Если тема ещё интересна, вышлю вам СОМ.DLL для использования в Word и любых других СОМ-поддерживающих программах.
Запись от bedvit размещена 16.02.2019 в 00:22 -
Если тема ещё интересна - ДА!
вышлю вам СОМ.DLL для использования в Word - спасибо, ждуЗапись от Ципихович Эндрю размещена 16.02.2019 в 11:47 -
Запись от bedvit размещена 17.02.2019 в 09:37 -
А у меня ваш код ошибку выдаёт "Invalid procedure call or argument"
Запись от FireHeadChaos размещена 26.10.2019 в 20:29 -
Запись от bedvit размещена 27.10.2019 в 12:53 -
вышлю вам СОМ.DLL для использования в Word
Выслал вам на указанную почту
решил вернуться к теме, приложите пжл здесь, спсЗапись от Ципихович Эндрю размещена 27.10.2019 в 13:08 -
Я пытаюсь использовать ваш тест: Пример тестирования и использования в VBA (элементарно через CreateObject("BedvitCOM.VBA")) . И что интересно объект создаётся. Открывал XLL
Запись от FireHeadChaos размещена 27.10.2019 в 13:09 -
Ципихович Эндрю, посмотрите по ссылке Последние версии библиотек. Там всегда самая последняя.
FireHeadChaos, можете показать код? Массив должен быть завернут в variant
Есть вариант сортировки любых данных (Variant), он более универсальный:Visual Basic 1
Dim Arr1: ReDim Arr1(-5 To testSize) As String
Библиотека COM (OLE Automation). Часть 2 - ArraySort (Variant)
FireHeadChaos, да есть такой момент, сейчас посмотрю.
Проблема решена. Залил новую версию.Запись от bedvit размещена 28.10.2019 в 00:03 -
Простая сорт. STRING 1х массива, по возрастанию (по умолч.): 0,9140625 сек.
Простая сорт. VARIANT 1х массива, по возрастанию (по умолч.): 1,132813 сек.
Простая сорт. VARIANT 2х массива, по возрастанию (по умолч.): 1,640625 сек.
Простая сорт. VARIANT 2х массива, по убыванию по первому ключу и по возрастанию по второму: 3,476563 сек.
Простая сорт. VARIANT 2х массива, по возрастанию по трём ключам: 4,257813 сек.
Простая сорт. VARIANT 2х массива, по убыванию, по первому столбцу и третьему: 0 сек.
Вот мой результат по сортировкам, заполнил предварительно колонки листа случайными значениями и ещё заметил нагрузку процессора на все 100Запись от FireHeadChaos размещена 28.10.2019 в 15:17 -
Сообщение от FireHeadChaos
Нагрузка на ЦП 100% - потому как использованы параллельные алгоритмы сортировки (библиотеки PPL).
По выявленным ошибкам - прошу писать в блог или на почту.
В блог думаю лучше, будет информация для других пользователей.Запись от bedvit размещена 28.10.2019 в 16:46