Что нового

[Данные, строки] Создание переменной в цикле

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Доброго дня, знатоки :smile: Нужна помощь. Проблема такая: есть цикл
Код:
For $i=1 to 10
и нужно чтобы в нём создавались переменные. Н-р: первый проход создалась глобальная переменная $t1, далее $t2, т.е. как бы $t$i. Как смог объяснил.
 

sims

Осваивающий
Сообщения
184
Репутация
24
ИМХО вам массив нужен.
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Как то так:
Код:
#include <Array.au3> ; для просмотра массивов
Local $aT[10]

; Наполнение массива случайными числами от 1 до 20
For $i = 1 To 10
   $aT[$i-1] = Int(Random(20) + 1)
   MsgBox(64, "Check", "$aT" & $i & " = " & $aT[$i-1])
Next
_ArrayDisplay( $aArray, "Вывод всего массива")
 
Автор
D

Dellroc

Осваивающий
Сообщения
151
Репутация
31
массив не подходит, т.к. переменная сама должна быть массивом.
 

sims

Осваивающий
Сообщения
184
Репутация
24
Тогда, многомерный массив.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
For $i = 1 to 10
	If Not IsDeclared('t' & $i) Then
		MsgBox(16, 'Error' , 'Переменной $t' & $i & ' нет!', 1)
	EndIf
Next

For $i = 1 to 10
	Assign('t' & $i, $i, 2)
Next

For $i = 1 to 10
	If IsDeclared('t' & $i) Then
		MsgBox(64, '$t' & $i , 'Значение: ' & Eval('t' & $i), 1)
	EndIf
Next
 
Автор
D

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Это я уже пробовал, но Eval не извлекает массив.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Dellroc [?]
и нужно чтобы в нём создавались переменные. Н-р: первый проход создалась глобальная переменная $t1, далее $t2, т.е. как бы $t$i.
Я правильно понял вопрос? О массиве ни слова, это первое :smile:
Второе, если вам нужно создать массив, и размерность его вам неизвестна, то это делается по-другому.

Код:
Dim $a[1000]
_ArrayDisplay($a)

For $i = 0 To 200
	$a[$i] = $i
Next

ReDim $a[$i]

_ArrayDisplay($a)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Dellroc [?]
массив не подходит, т.к. переменная сама должна быть массивом.
Почему не подходит?
Код:
#include <Array.au3>

Global $aArrayArrays[Random(10, 15, 1)], $aTmp[1]

For $i = 0 To UBound($aArrayArrays) - 1
	Switch Random(0, 1, 1)
		Case 0
			ReDim $aTmp[Random(5, 10, 1)]
			For $j = 0 To UBound($aTmp) - 1
				$aTmp[$j] = Random()
			Next
		Case 1
			ReDim $aTmp[Random(5, 10, 1)][Random(2, 5, 1)]
			For $j = 0 To UBound($aTmp) - 1
				For $x = 0 To UBound($aTmp, 2) - 1
					$aTmp[$j][$x] = Random(1, 100, 1)
				Next
			Next
	EndSwitch
	$aArrayArrays[$i] = $aTmp
Next
$aTmp = 0
_ArrayDisplay($aArrayArrays)
For $i = 0 To UBound($aArrayArrays) - 1
	_ArrayDisplay($aArrayArrays[$i], $i)
Next
 
Автор
D

Dellroc

Осваивающий
Сообщения
151
Репутация
31
очень трудный пример с такой кучей рандомов.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Dellroc [?]
массив не подходит, т.к. переменная сама должна быть массивом.
Массив может быть вложенным, то есть массив массивов. Прямого доступа к ячейке вложенного массива нет, сначала ячейка с массивом присваивается переменной, потом доступ уже как в обычном массиве.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Dellroc [?]
Eval не извлекает массив.
Кто сказал:

Код:
#include <Array.au3>

Dim $aArr[3] = [1, 2, 3]

For $i = 1 to 10
	If $i = 1 Then
		Assign('t' & $i, $aArr, 2)
	Else
		Assign('t' & $i, $i, 2)
	EndIf
Next

For $i = 1 to 10
    If IsDeclared('t' & $i) Then
		$vVal = Eval('t' & $i)
		
		If IsArray($vVal) Then
			_ArrayDisplay($vVal)
		Else
			ConsoleWrite($vVal & @LF)
		EndIf
    EndIf
Next
 
Верх