Правильная конкатенация18.04.2023, 02:34. Показов 5699. Ответов 117
Метки нет (Все метки)
На другом форуме видел такой вариант конкатенации большого массива и он мне очень понравился, поскольку скорость близкая к join. На сколько я знаю тип String это структура содержащая в себе массив символов и еслиб у нас был доступ к этому массиву и возможность делать что-то вроде redim preserve.. В общем, можно ли как-то улучшить алгоритм, чтоб закасматить окончательно етот join? )
0
|
||
| 18.04.2023, 02:34 | |
|
Ответы с готовыми решениями:
117
Из символов одного текста строковых функций о операций конкатенация получить другой текст Правильная обработка ошибок конкатенация строки |
| 01.05.2023, 18:07 [ТС] | |||||||
|
SafeArrayRedim Not Not ResultSplit, SafeArrayBound(0) Добавлено через 5 минут Трик здесь вместо Not Not рекомендует использовать другую функцию
0
|
|||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 01.05.2023, 19:11 | |
|
testuser2, да пожалуйста, я сам это нашёл на сайте VbSpeeds, там очень много скоростных фишек для VB. Ихний девиз VB может работать очень быстро. А то у многих заблуждение что программы созданные на VB медленные. Это смотря как программировать. На VB6 можно написать коды которые будут работать быстрее чем на С++
Добавлено через 1 минуту The trick, вот сюда зайди посмотри http://www.xbeat.net/vbspeed/ я там это всё скачал там ещё очень много чего есть для супер-скоростей
0
|
|
| 12.09.2023, 10:26 [ТС] | |||||||
|
Издержки метода - дополнительное использвание памяти, получается если хотим сделать, указательный массив на всю строку (или ее часть), то для начала создать пустой массив нужного размера, который (изначальный буфер этого массива) в последующем будет висеть в памяти уже "мертвым грузом". Не знаю, может быть есть способ создания SafeArray с указанием уже готового буфера.. Для этого надо понимать его структуру и т.д. Для большей униерсальности и адаптации под VBA заменил GetMem4 на CopyMemory и использовал ArrPtr(VarPtr) из библиотеки VBE7.dll Кликните здесь для просмотра всего текста
На отметке "Stop" в окне Locals можно видеть, что массив var указывает напрямую на часть строки переменной q. И ели поменять какое-то значение в массиве var, то изменения также будут видны в строке q. Также в тесте видна работа левостороней функции Mid, то, что она работает напрямую с буфером строки. Также видна работа команды redim preserve, то, что при увеличении массива можно по прежнему использовать тот же указатель.
0
|
|||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||
| 12.09.2023, 11:02 | |||
|
Добавлено через 1 минуту
0
|
|||
| 12.09.2023, 11:11 [ТС] | ||
|
VBE7 это VBA-шная основная библиотека, если есть МСО, то она есть
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 12.09.2023, 11:15 | ||
|
Добавлено через 2 минуты testuser2, кстати была же тема как использовать строку как байтовый массив, может не на этом форуме, но было же помню
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 12.09.2023, 11:18 | |
|
testuser2, в 2008 году же это ещё обсуждали: https://forum.sources.ru/index... ew=showall
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||||||||||
| 12.09.2023, 11:36 | |||||||||||
|
Итак переписал скрипт для VB6:
Но по факту я так вообще и не понял, что делает этот скрипт???? Добавляет один пробел во фразе "Привет мир"? Добавлено через 3 минуты Вот кстати фокус "строка как байтовый массив" пусть и на нашем форуме будет:
1
|
|||||||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||
| 12.09.2023, 11:53 | |||
|
Добавлено через 15 секунд Добавлено через 1 минуту testuser2, ты там почитай тему форума на исходниках кстати, я же ссылку тебе скинул, там есть и возвраты указателей
0
|
|||
| 12.09.2023, 12:21 [ТС] | ||
|
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||||||||
| 12.09.2023, 12:53 | ||||||||
|
Добавлено через 1 минуту Добавлено через 2 минуты The trick, помнишь у стандартной поставки VB6 был даже Microsoft'овский пример сравнения Mid$ и CopyMemory, в те времена раньше CopyMemory был быстрее на старых медленных компьютерах, теперь наоборот Mid$ быстрее стал Добавлено через 4 минуты The trick, о кстати спасибо за код, я не знал что Mid можно так использовать в обратную сторону я думал только для получения подстроки для сравнений и всё в общем я затестил:
Кстати знак доллара играет важную роль, при очень больших объёмах, может выиграть пол секунды времени даже, я помню тестировал раньше
1
|
||||||||
| 12.09.2023, 16:03 [ТС] | ||||||||||||||||
|
Добавлено через 8 минут Добавлено через 5 минут Добавлено через 1 час 34 минуты
Добавлено через 19 минут The trick, не подскажешь, можно ли также манипулировать строками (bstr), как safearray, т.е. менять указатель на данные и прописывать размер этих данных? Размер я вроде знаю, он указывается перед буфером. Можно ли строковой переменной подменить буфер на другой? Добавлено через 53 минуты А все понял. Строковая переменная фактически хранит указатель на буфер. И если этот указатель переписать, то наверное можно "подменить" буфер у строковой переменной. В переменной l оказывается то же, что в выдаче StrPtr(sarr(0))
1
|
||||||||||||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 12.09.2023, 16:11 | ||
|
testuser2, ну я думаю, ты уже узнал всё, что хотел)))
Добавлено через 11 секунд узнал много нового так точно) Добавлено через 4 минуты кстати в примере строка как байтовый массив, получается что если менять значения байтового массива то меняется и сама строка, но наоборот у меня не получалось сделать, что если менять строку то и меняется байтовый массив... Добавлено через 1 минуту
0
|
||
| 12.09.2023, 16:33 [ТС] | ||||||||||
|
Добавлено через 2 минуты Добавлено через 12 минут
0
|
||||||||||
| 12.09.2023, 16:33 | |
|
Помогаю со студенческими работами здесь
40
конкатенация строк в excel через vba Конкатенация и последующее копирование уникальных строк по условию Добавление записей массива из одной книги на лист другой + возможная конкатенация Из символов одного текста с помощью стоковых функций о операция конкатенация получить другой текст Конкатенация Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|