• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

dimat

Well-known member
31.07.2008
508
0
BIT
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 работает номарльно.

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

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
dimat
так это... Redim работает только для последнего индекса.
То есть Arr(1,1) -> Arr(1,2) OK!
Arr(1,1) -> Arr(2,1) Error!
 

dimat

Well-known member
31.07.2008
508
0
BIT
0
то есть первый индекс никак не поменять?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
Только последний, либо извращаемся, либо уходим на java + ls2j, либо java полностью. Кажись в ней еще можно так делать.
Либо меняем архитектуру.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
а почитать?...
и второе - а зачем менять индекс (первый) и зачем двуразмерные массивы?
индекс от 0 - вполне нормально, массивы с размерностью более 1-го - это вам в фортран надо ;)
 

dimat

Well-known member
31.07.2008
508
0
BIT
0
Общая задача: Необхимо хранить таблицу данных с возможность добавления новых значений, то есть первый индекс - строка, второй индекс - столбец.
Вот и подумал что двумерный массив будет подходящим решением, хотя раньше приходилось использовать только одномерные
 

savl

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

erdi

Green Team
20.08.2008
264
17
BIT
0
используй 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
7 941
609
BIT
215
в кастомных типах еще и матрицу баянить... ну, знаете...
ужеж сделали тип - вот в рамках его и делайте колонки
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!