Правильная конкатенация18.04.2023, 02:34. Показов 7252. Ответов 117
Метки нет (Все метки)
На другом форуме видел такой вариант конкатенации большого массива и он мне очень понравился, поскольку скорость близкая к join. На сколько я знаю тип String это структура содержащая в себе массив символов и еслиб у нас был доступ к этому массиву и возможность делать что-то вроде redim preserve.. В общем, можно ли как-то улучшить алгоритм, чтоб закасматить окончательно етот join? )
0
|
||
| 18.04.2023, 02:34 | |
|
Ответы с готовыми решениями:
117
Из символов одного текста строковых функций о операций конкатенация получить другой текст Правильная обработка ошибок конкатенация строки |
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 12.09.2023, 17:09 | |
|
0
|
|
|
Модератор
|
||||||
| 12.09.2023, 20:02 | ||||||
Сообщение было отмечено testuser2 как решение
Решение
Работать непосредственно с символами можно без проблем замапив SAFEARRAY дескриптор на данные:
1
|
||||||
| 13.09.2023, 02:34 [ТС] | ||
|
The trick, Спасибо за более подробный разбор структуры SafeArray, но еще можно добавить, что надо всегда запоминать прежние указатели, и возвращать потом их на место (для vba это критичный момент)
Добавлено через 13 минут
0
|
||
| 13.09.2023, 14:22 [ТС] | ||||||
|
Все, понял как это работает, благодаря коду Анатолия. Получается, что VarPtr(ArrPtr) в случае с массивом дает нам адрес, места где находится указатель на структуру (SAFEARRAY1D). Поменяв этот указатель, мы легко можем залинковать переменнюу массива на свою структуру (как в данном случае), или на структуру другого массива, фактичеки сделав указатель-клон другого массива, который не будет сбиваться, даже если сделать redim preserve. На vba так будет рабоать без вылета, нужно только вернуть прежнее состояние массива (обнулить указатель) в конце.
0
|
||||||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 13.09.2023, 16:07 | |
|
testuser2, нифигасебе ты заморочился)
0
|
|
| 13.09.2023, 17:48 [ТС] | ||||||
|
HackerVlad, еще бы с устройтвом 2мерного массива разобраться (в Екселе 2 мерные часто используются), и можеть сделать, какой-нибудь join для 2мерного массива..
Добавлено через 1 час 17 минут x64 vba-совместимый вариант Кликните здесь для просмотра всего текста
0
|
||||||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||
| 13.09.2023, 19:33 | ||
|
Добавлено через 59 секунд да и вместо двухмерного массива мне проще массив структуры использовать) с нужными атрибутами)))
0
|
||
|
Модератор
|
|||
| 13.09.2023, 20:17 | |||
|
0
|
|||
| 14.09.2023, 18:06 [ТС] | |||||||
|
С SafeArray разных размерностей и типов, более менее освоился. У всех массивов данные в сущности являются единым блоком, который можно представить как вектор (1d массив). Если это матрица, то элементы располагаются постолбечно. Прямой доступ к данным вариантного 2мерного массива:
0
|
|||||||
| 16.09.2023, 04:50 [ТС] | ||
|
Вот, к слову, интересная страничка, пока не уловил, в чем там суть. Кто поймет объясните в общих чертах если не трудно.
0
|
||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||
| 16.09.2023, 12:13 | ||
|
0
|
||
| 16.09.2023, 13:01 [ТС] | |
|
У меня по его тестам, api функция, оказалась значительно быстрее, чем его реализация, но кто его знает, может было бы по другому, на x64 c последними обновлениями и включенным "защитником". У него без CopyMemory как-то работает, почему-то используется variant..
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 16.09.2023, 14:27 | |
|
testuser2, да не обращай внимания на этот код вообще
0
|
|
| 16.09.2023, 15:17 [ТС] | |||||||||||||||||
0
|
|||||||||||||||||
|
Модератор
|
|
| 16.09.2023, 15:22 | |
|
Такое вообще проще сделать через SAFEARRAY. Сделать Long массив размером от 0 до 536870912 и адресовать всю память. Для Byte и Integer просто битовыми масками выделять нужную часть. Для 64 бит так уже не получится придется динамически подгонять размер или указатель т.к. там 64 битная адресация.
1
|
|
| 16.09.2023, 15:59 [ТС] | ||
|
0
|
||
|
Модератор
|
|||
| 16.09.2023, 16:05 | |||
|
1
|
|||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 16.09.2023, 16:07 | |
|
0
|
|
| 16.09.2023, 16:07 | |
|
конкатенация строк в excel через vba Конкатенация и последующее копирование уникальных строк по условию Добавление записей массива из одной книги на лист другой + возможная конкатенация Из символов одного текста с помощью стоковых функций о операция конкатенация получить другой текст Конкатенация Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|