Что нового

Собрать имя переменной на ходу

Lawrmini

Новичок
Сообщения
31
Репутация
0
Доброго времени суток всем.
Пытаясь сократить кол-во строк в скрипте столкнулся с проблемой получения имен переменных на ходу.
т.е как то так:
Код:
$stream[1] = "команда 1"
$stream[2] = "команда 2"
$stream[3] = "команда 3"
$stream[4] = "команда 4"
$x = 0
While $x < 4
$stream = $team[$x]
  MsgBox (0 , "Номер потока"  , $stream )
  $x = $x + 1
  WEnd

Так работать не хочет.

Код:
$stream_1 = "команда 1"
$stream_2 = "команда 2"
$stream_3 = "команда 3"
$stream_4 = "команда 4"
$x = 0
While $x < 4
$stream = $stream_&$x
  MsgBox (0 , "Номер потока"  , $stream )
  $x = $x + 1
  WEnd

Так тоже.

Подтолкните в нужную сторону.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Lawrmini [?]
Подтолкните в нужную сторону

Код:
Assign()
Eval()


А вообще данный код можно переписать так:
Код:
$stream[] = ["команда 1", "команда 2", "команда 3", "команда 4"]

For $i = 0 To UBound($stream) - 1
	MsgBox (0 , "Номер потока"  , $stream[$i])
Next
 
Автор
L

Lawrmini

Новичок
Сообщения
31
Репутация
0
Код:
Eval()
подходит больше так как к переменной $x будет привязано много процессов которые будут именоваться типа $cut_1, $copy_1 , $paste_$x
потому и в цикле while через автоинкремент
 
A

Alofa

Гость
Lawrmini сказал(а):
...Пытаясь сократить кол-во строк в скрипте столкнулся с проблемой получения имен переменных на ходу...
Извините (возможно туплю), а это как? Можно объяснить подробней, принцип всего этого? И как сократится количество строк в скрипте?
 
Автор
L

Lawrmini

Новичок
Сообщения
31
Репутация
0
Alofa сказал(а):
Lawrmini сказал(а):
...Пытаясь сократить кол-во строк в скрипте столкнулся с проблемой получения имен переменных на ходу...
Извините (возможно туплю), а это как? Можно объяснить подробней, как вы это видите в принципе и как это сократит количество строк в скрипте?

Допустим надо сделать за 300 сек в о одном окне Mozilla 50-60 телодвижений. Единственное условие это замена ключегого слова. Все остальное на странице повторяется. Ключевых слов 4. написать 2000 строк кода и потом поправлять когда поменяют верстку сайта или написать 500 засунуть в цикл и с легкостью потом править. Вы что выберите?


Добавлено:
Сообщение автоматически объединено:

Код:
$stream_1 = "команда 1"
$stream_2 = "команда 2"
$stream_3 = "команда 3"
$stream_4 = "команда 4"
$x = 0
While $x < 4
$s = Eval("$stream" & "_" & $x)
;$s = Eval("a" & "_" & "b")
MsgBox (0 , "Номер потока"  , $s)
  $x = $x + 1
  WEnd

Выводит пустые MsgBox'ы


Добавлено:
Сообщение автоматически объединено:

Medic84 сказал(а):
А вообще данный код можно переписать так:
Код:
$stream[] = ["команда 1", "команда 2", "команда 3", "команда 4"]

For $i = 0 To UBound($stream) - 1
	MsgBox (0 , "Номер потока"  , $stream[$i])
Next
Тоже не работает. Выдает ошибку : ==> Expected a "=" operator in assignment statement.:
 
A

Alofa

Гость
Lawrmini сказал(а):
... Вы что выберите?

Я бы выбрал это:
Код:
_Stream(1, "команда 1")
_Stream(2, "команда 2")
_Stream(3, "команда 3")
_Stream(4, "команда 4")
 
Func _Stream($x, $Keyword)
	MsgBox (0 , "Номер потока " & $x, $Keyword)
EndFunc


Или, что тоже самое:
Код:
For $i=1 To 4
	_Stream($i, "команда " & $i)
Next

Func _Stream($x, $Keyword)
	MsgBox (0 , "Номер потока " & $x, $Keyword)
EndFunc


Или, если ключевые слова отличаются только цифрами:
Код:
For $x=1 To 4
	MsgBox (0 , "Номер потока " & $x, "команда " & $x)
Next
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Lawrmini сказал(а):


Добавлено:
Сообщение автоматически объединено:

Medic84 сказал(а):
А вообще данный код можно переписать так:
Код:
$stream[] = ["команда 1", "команда 2", "команда 3", "команда 4"]

For $i = 0 To UBound($stream) - 1
	MsgBox (0 , "Номер потока"  , $stream[$i])
Next
Тоже не работает. Выдает ошибку : ==> Expected a "=" operator in assignment statement.:



Первую строку попробуйте написать так:
Код:
Dim $stream[] = ["команда 1", "команда 2", "команда 3", "команда 4"]
 
Автор
L

Lawrmini

Новичок
Сообщения
31
Репутация
0
Alofa сказал(а):
Lawrmini сказал(а):
... Вы что выберите?

Я бы выбрал это:
Код:
_Stream(1, "команда 1")
_Stream(2, "команда 2")
_Stream(3, "команда 3")
_Stream(4, "команда 4")
 
Func _Stream($x, $Keyword)
	MsgBox (0 , "Номер потока " & $x, $Keyword)
EndFunc


Или, что тоже самое:
Код:
For $i=1 To 4
	_Stream($i, "команда " & $i)
Next

Func _Stream($x, $Keyword)
	MsgBox (0 , "Номер потока " & $x, $Keyword)
EndFunc
Даже не додумался до этого. Наверно еще не дорос.
Первый раз прочитал про AutoIt месяц назад. Вот сижу ковыряю потихоньку. Спасибо.
 

Khaibit

Осваивающий
Сообщения
103
Репутация
25
Код:
Local $stream[4] = ["команда 1","команда 2","команда 3", "команда 4"]

For $x = 0 to UBound($stream) -1
	MsgBox(0, "Номер потока", $stream[$x])
Next


Код:
$stream_1 = "команда 1"
$stream_2 = "команда 2"
$stream_3 = "команда 3"
$stream_4 = "команда 4"
$x = 1
While $x < 5
	MsgBox(0, "Номер потока", Eval('stream_' & $x))
	$x = $x + 1
WEnd
 
A

Alofa

Гость
OffTopic:
Lawrmini
Учитесь формулировать мысль для того, чтобы людям не пришлось в будущем интуитивно догадываться, о чем вопрос.
Согласитесь есть разница между понятиями "Имя переменной" и "Значение переменной".
Код:
$stream_1 = "команда 1"
;   "$stream_1" - Имя переменной
;   "команда 1" - Значение переменной
 
Верх