Страницы: 1
RSS
Инструменты для работы с массивами COM (VBA) - преобразование данных: регистра, строк, чисел
 
Мое почтение, джентльмены!
Новые инструменты для массива.
Для массивов любого количества размерностей, типа - VARIANT.
VERSION_COM L"BedvitCOM.dll_v2.0.2.0"
VERSION_XLL L"BedvitXLL.dll_v3.2.2.0"

Преобразование происходит "на месте" (штатным инструментом VariantChangeType)
Для всех элементов массива, для которых возможны преобразования:
1.ArrayCharLowerV - преобразовать все символы строки в нижний регистр
2.ArrayCharUpperV - преобразовать все символы строки в ВЕРХНИЙ регистр
3.ArrayNumToCharV - преобразовать все данные в тип: String
4.ArrayCharToNumV - преобразовать все данные в тип: Double

Пример:
Код
Sub testArrayCharNumV()
 Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA")
 Dim p: p = Array("2", "нижний регистр", 1, "ВЕРХНИЙ РЕГИСТР", 1, 56)

bVBA.ArrayCharLowerV p
bVBA.ArrayCharUpperV p
bVBA.ArrayNumToCharV p
bVBA.ArrayCharToNumV p
 
End Sub


Скачать можно здесь.
Изменено: bedvit - 22.12.2022 17:38:29
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, приветствую
ArrayCharLowerV, ArrayCharUpperV - как преобразуют числа? В текст или без изменений? Как преобразуют Empty?
ArrayNumToCharV: Как преобразует Empty?
ArrayCharToNumV: Как преобразует Empty? Как преобразует текст?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
ArrayCharLowerV, ArrayCharUpperV - как преобразуют числа? В текст или без изменений? Как преобразуют Empty?
у чисел нет регистра. Никак, остаются как были.
Цитата
Jack Famous написал:
ArrayNumToCharV: Как преобразует Empty?
не тестировал. Как придумали спецы Microsoft, использую их функцию.
Цитата
Jack Famous написал:
ArrayCharToNumV: Как преобразует Empty? Как преобразует текст?
про Empty выше. Про строки: если строка похожа на число - в число, если нет, останется строка (алгоритм не мой, используется функция от Microsoft, ссылку выше разместил, можно погуглить тонкости или потестировать).
Если будут тесты от тебя, я с интересом почитаю.
Изменено: bedvit - 21.09.2022 09:42:51
«Бритва Оккама» или «Принцип Калашникова»?
 
Преобразования регистров происходят заметно быстрее
Любопытно, что при увеличении длины строки разница становится меньше.

Цитата
bedvit: Strung
опечатка в п.3
Изменено: Jack Famous - 22.12.2022 14:14:02
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
ArrayCharToNumV. Как работает

    Скорость впечатляет: 4,23 сек для 20 млн преобразований различных строк вида:
пробел & число (целое / десятичное / положительное / отрицательное) & неразрывный пробел

    При сравнении преобразования "чистых" чисел, сохранённых, как текст (Cstr(num)) незначительно быстрее двойного отрицания.
Изменено: Jack Famous - 22.12.2022 15:31:40
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
ArrayNumToCharV
Работает около 2ух раз быстрее штатного CStr(), но НЕ ПРЕОБРАЗУЕТ ошибки в текст (хранит, как есть и можно выгрузить на лист)

Я бы так переименовал все процедуры:
Изменено: Jack Famous - 22.12.2022 16:53:46
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
НЕ ПРЕОБРАЗУЕТ ошибки в текст
По-моему логично. Ведь я могу в тексте набрать "ошибка", это ошибка преобразования или текст. Как отобрать ошибки?
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit: По-моему логично
а по-моему, и так и так логично. Если преобразуешь ВСЁ в текст, то на выходе должен быть текст (как у CStr). С преобразованием в число, кстати, ошибки не тестил, но там было бы логичным оставлять, потому что ошибку нельзя в число преобразовать. Разве что NULL.
Изменено: Jack Famous - 22.12.2022 17:46:33
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
В чем логичность для чисел ошибки оставлять, а для строк нет? Ошибка это не строка и не число, это другой тип данных (кстати больше на число похоже, т.к. там числовое значение содержится).
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, соглашусь)
Все процедуры сохраняют ошибки нетронутыми
Изменено: Jack Famous - 22.12.2022 17:59:40
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Да, выходит единый механизм отслеживания ошибок.
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1
Наверх