Как объединить несколько массивов?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dimalib
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.12.2003 (Пн) 8:03

Как объединить несколько массивов?

Сообщение dimalib » 11.05.2004 (Вт) 10:45

Привет всем. С прошедшим праздником. :) Как объединить несколько массивов, и получит один массив? :roll:
:shock:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.05.2004 (Вт) 10:48

Если массивы числовые, то проще и безопаснее всего через CopyMemory. Несколько более рискованно (но значительно быстрее) использовать достижения GSerg'а на ниве "SAFEARRAY Tricks" :)
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.05.2004 (Вт) 11:21

Да нет, в общем безопасно всё :wink:
Только в данном случае номер не пройдёт, ибо pvData только один, и указывает он на непрерывный блок. Так что CopyMemory :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

dimalib
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.12.2003 (Пн) 8:03

Сообщение dimalib » 11.05.2004 (Вт) 13:03

Никогда не использовал. :oops: Это типа так:
Код: Выделить всё
Copymemory resN(0), res1(0), UBound(resN) - LBound(resN) + 1
пишется? :? Если все правильно то что подключит? А то ругается что:
Sub or Function not defined

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.05.2004 (Вт) 13:27

Функцию надо предварительно задекларировать
Код: Выделить всё
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
...
Dim res() As Long, I As Long, N As Long
N = (UBound(data1) - LBound(data1) + 1) + (UBound(data2) - LBound(data2) + 1) + ...
ReDim res(1 To N)
I = 1
N = UBound(data1) - LBound(data1) + 1
CopyMemory res(I), data1(LBound(data1)), 4&*N
I = I + N
N = UBound(data2) - LBound(data2) + 1
CopyMemory res(I), data2(LBound(data2)), 4&*N
I = I + N
...
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList