1

Тема: VBS: не получается сделать массив структур с массивом )

Добрый день. Не знаю правильно ли я использовал терминологию в заголовке, все ж С/С++ ближе... Но есть потребность сделать динамический массив структур, в свою очередь каждая из которых тоже содержит "мембером" динамический массив... Попробовал вот так:


Option Explicit

Main

Function Main
	Dim arr(), i
	For i = 0 To 10
		ReDim Preserve arr(i)
		Set arr(i) = New struct
		arr(i).sVar1 = "str" & i & " var1"
		arr(i).sVar2 = "str" & i & " var2"
		
		Dim j
		For j = 0 To 10
			ReDim Preserve arr(i).aArr(j)
			arr(i).aArr(j) = 121212 + j
		Next		
	Next
	
	For i = 0 To UBound(arr)
		WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
	Next
	
End Function


Class struct
  Public aArr()
  Public sVar1
  Public svar2  
End Class

На строке

ReDim Preserve arr(i).aArr(j)

валится с ошибкой:

Ошибка компиляции Microsoft VBScript: Предполагается наличие окончания инструкции

Подскажите, что делаю не так...

2

Re: VBS: не получается сделать массив структур с массивом )

badhabit, а можно увидеть скрипт целиком ? А то объявления struct не видно.

На первый взгляд, как я понимаю, беда в том, что Вы пытаетесь "редимить" свойство объекта. К сожалению, VBScript хочет после Redim получить прямую ссылку на массив. Думаю в Вашем случае может помочь что-то типа:


Option Explicit

Main

Function Main
	Dim arr(), i, propArray
	For i = 0 To 10
		ReDim Preserve arr(i)
		Set arr(i) = New struct
		arr(i).sVar1 = "str" & i & " var1"
		arr(i).sVar2 = "str" & i & " var2"
		
		Dim j
		propArray = arr(i).aArr
		For j = 0 To 10
			ReDim Preserve propArray(j)
			propArray(j) = 121212 + j
		Next
		arr(i).aArr = propArray		
	Next
	
	For i = 0 To UBound(arr)
		WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
	Next
	
End Function

Не уверен, что Вы выбрали правильный путь. Думаю всё-таки стоит взглянуть на всю картину целиком.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3 (изменено: badhabit, 2018-03-21 19:29:16)

Re: VBS: не получается сделать массив структур с массивом )

Xameleon, так я привёл весь скрипт, просто проскролить надо, в самом низу есть объявление класса struct
Пс. Ваш способ попробую

4

Re: VBS: не получается сделать массив структур с массивом )


Option Explicit

Main

Function Main
	Dim arr(), i, propArray
	For i = 0 To 10
		ReDim Preserve arr(i)
		Set arr(i) = New struct
		arr(i).sVar1 = "str" & i & " var1"
		arr(i).sVar2 = "str" & i & " var2"
		
		Dim j
		propArray = arr(i).aArr
		For j = 0 To 10
			ReDim Preserve propArray(j)
			propArray(j) = 121212 + j
		Next
		arr(i).aArr = propArray		
	Next
	
	Dim k
	For i = 0 To UBound(arr)
		WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
		Dim zzz()
		zzz = arr(i).aArr
		For k = 0 To UBound(zzz) - 1
			WScript.Echo zzz(k)
		Next
	Next	 
	
End Function


Class struct
  Public aArr()
  Public sVar1
  Public svar2  
End Class

теперь ругается тут

arr(i).aArr = propArray

говрит
несоответствие типа

5

Re: VBS: не получается сделать массив структур с массивом )

badhabit,

badhabit пишет:

Xameleon, так я привёл весь скрипт, просто проскролить надо, в самом низу есть объявление класса struct

Прошу прощения. Не заметил.

Тогда вот так можно сделать:

Option Explicit

Main

Function Main
	Dim arr(), i, propArray
	For i = 0 To 10
		ReDim Preserve arr(i)
		Set arr(i) = New struct
		arr(i).sVar1 = "str" & i & " var1"
		arr(i).sVar2 = "str" & i & " var2"
		
		Dim j
		propArray = arr(i).aArr
		For j = 0 To 10
			ReDim Preserve propArray(j)
			propArray(j) = 121212 + j
		Next
		arr(i).aArr = propArray		
	Next
	
	Dim k
	For i = 0 To UBound(arr)
		WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
		Dim zzz
		zzz = arr(i).aArr
		For k = 0 To UBound(zzz) - 1
			WScript.Echo zzz(k)
		Next
	Next	 
	
End Function


Class struct
	Public aArr
	Public sVar1
	Public svar2
	Private Sub Class_Initialize()
		aArr = Array()
	End Sub
End Class
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

6

Re: VBS: не получается сделать массив структур с массивом )

Xameleon, спасибо большое. Все заработало. Вот ещё ссылка по теме https://stackoverflow.com/questions/480 … n-vbscript

7

Re: VBS: не получается сделать массив структур с массивом )

badhabit, рад, что пригодилось. Вообще, ИМХО, VBS классы больше подразумеваются под объектную модель, нежели под структуры. Возможно Вашу задачу можно решить иначе. Если поведаете о конечной цели, возможно смогу посоветовать что-то более подходящее.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

8

Re: VBS: не получается сделать массив структур с массивом )

Да в принципе надо было получить то - что получилось, без разницы как это называть.)) Получился динамический массив "объектов" и в каждом еще по одному динамическому массиву... Добавив в "структуру" конструктор и метод, в принципе получил класс))
Просто писать на vbs самый, в настоящий момент, удобный вариант, а синтаксис я его не шибко хорошо знаю, так что еще раз спасибо за помощь!