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

  • Автор темы Автор темы dimat
  • Дата начала Дата начала

dimat

Well-known member
31.07.2008
508
0
Всем привет!

Описан тип:
Код:
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 работает номарльно.

Подскажите какие еще варианты решения есть?
 
dimat
так это... Redim работает только для последнего индекса.
То есть Arr(1,1) -> Arr(1,2) OK!
Arr(1,1) -> Arr(2,1) Error!
 
то есть первый индекс никак не поменять?
 
Только последний, либо извращаемся, либо уходим на java + ls2j, либо java полностью. Кажись в ней еще можно так делать.
Либо меняем архитектуру.
 
а почитать?...
и второе - а зачем менять индекс (первый) и зачем двуразмерные массивы?
индекс от 0 - вполне нормально, массивы с размерностью более 1-го - это вам в фортран надо ;)
 
Общая задача: Необхимо хранить таблицу данных с возможность добавления новых значений, то есть первый индекс - строка, второй индекс - столбец.
Вот и подумал что двумерный массив будет подходящим решением, хотя раньше приходилось использовать только одномерные
 
Таблица. Что мешает остаться при одномерном массиве, каждый элемент которого строка?
Это конечно изврат на скорую руку:
Массив - строки
Каждый элемент тип: содержит колонку + данные.
Всё)
 
используй 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
 
в кастомных типах еще и матрицу баянить... ну, знаете...
ужеж сделали тип - вот в рамках его и делайте колонки
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab