Массив Собственного Типа И Redim Preserve

dimat

Lotus team
31.07.2008
516
0
#1
Всем привет!

Описан тип:
Код:
Type myt
p1 As String
p2 As String
End Type
Объявлен массив:
Код:
Dim arr() As myt
Redim arr(1,1)
arr(1,1).p1="p1value"
arr(1,1).p2="p2value"
Необходимо в массив добавить новый элемент и, следовательно, увеличить размерность.
Пытаюсь делать так:
Код:
Redim Preserve arr(2,1)
arr(2,1).p1="p1value2"
На строке
Код:
Redim Preserve arr(2,1)
ошибка "Subscript out of range".

Пока это все дело работает через промежуточный массив, то есть redim без preserve работает номарльно.

Подскажите какие еще варианты решения есть?
 

savl

Lotus team
28.10.2011
2 136
105
#2
dimat
так это... Redim работает только для последнего индекса.
То есть Arr(1,1) -> Arr(1,2) OK!
Arr(1,1) -> Arr(2,1) Error!
 

savl

Lotus team
28.10.2011
2 136
105
#4
Только последний, либо извращаемся, либо уходим на java + ls2j, либо java полностью. Кажись в ней еще можно так делать.
Либо меняем архитектуру.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#5
а хэлп почитать?...
и второе - а зачем менять индекс (первый) и зачем двуразмерные массивы?
индекс от 0 - вполне нормально, массивы с размерностью более 1-го - это вам в фортран надо ;)
 

dimat

Lotus team
31.07.2008
516
0
#6
Общая задача: Необхимо хранить таблицу данных с возможность добавления новых значений, то есть первый индекс - строка, второй индекс - столбец.
Вот и подумал что двумерный массив будет подходящим решением, хотя раньше приходилось использовать только одномерные
 

savl

Lotus team
28.10.2011
2 136
105
#7
Таблица. Что мешает остаться при одномерном массиве, каждый элемент которого строка?
Это конечно изврат на скорую руку:
Массив - строки
Каждый элемент тип: содержит колонку + данные.
Всё)
 

erdi

Well-known member
20.08.2008
265
17
#8
используй list

Код:
Type usetype
param1 As String
param2 As String
End Type

Dim arr List As usetype
Dim row() As Integer
Dim column() As Integer
Dim x, y As Integer
Dim vparam1, vparam2 As String

Redim Preserve row(2) As Integer
Redim Preserve column(5) As Integer

For x=0 To Ubound(row)
For y=0 To Ubound(column)
arr(Cstr(x)+","+Cstr(y)).param1=Cstr(x)
arr(Cstr(x)+","+Cstr(y)).param2=Cstr(y)
Next
Next
vparam1=arr("2, 1").param1
vparam2=arr("2, 5").param2
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#9
в кастомных типах еще и матрицу баянить... ну, знаете...
ужеж сделали тип - вот в рамках его и делайте колонки