Что нового

Execute не объявляет переменные

Ilyialat

Новичок
Сообщения
54
Репутация
2
Есть код:
Код:
$a = 0

Func f()
msgbox(0,'','f')
EndFunc

Func Executeau3($filename)
$file = FileOpen($filename)
While 1
$line = FileReadLine($file)
If @error == -1 Then ExitLoop
Execute($line)
WEnd
FileClose($file)
EndFunc

Executeau3('test.au3')


Содержание test.au3:
Код:
$a = 1 ;работает
f();работает
$b = 1;не работает


Вопрос: Почему Execute не объявляет переменные и как можно это обойти?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
Execute( 'Assign ( "varname", "data" [, flag] )' )
 
Автор
I

Ilyialat

Новичок
Сообщения
54
Репутация
2
:rofl: :rofl: :rofl: Я только что сам до этого дошёл =)) Но... Это чутка неудобно... Пока что буду юзать это)
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Ilyialat
Объяви в начале скрипта массив, а затем функцией Execute уже меняй значения в ячейках.
 
Автор
I

Ilyialat

Новичок
Сообщения
54
Репутация
2
test.au3 - полностью независимый файл. Единственное, он юзает функции из файла, который его запускает.
Пример: Есть файл с определёнными мною функциями. Он выполняет пользовательский код, в котором используются мои фунции.
 
Автор
I

Ilyialat

Новичок
Сообщения
54
Репутация
2
test.au3
Код:
Global $pArray[5] = [0,0,0,0,0]
$pArray[2] = 5
MsgBox( 64, '', $pArray[2] )

;Не работает
Ты, наверное, хотел в основной скрипт добавить переменную, чего мне делать нельзя. Основной скрипт будет скомпилирован.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Ilyialat
Ты не понял меня.

Содержимое скрипта:
Код:
Global $pArray[5] = [0,0,0,0,0]

;$твоя функция чтения файла с операциями$
MsgBox( 0, '', $pArray[2] )


Содержимое блокнота:
Код:
$pArray[2] = 5
 
Автор
I

Ilyialat

Новичок
Сообщения
54
Репутация
2
Это ты не понял.
Скомп. скрипт(главный):

Код:
Func Executeau3($filename)
$file = FileOpen($filename)
While 1
$line = FileReadLine($file)
If @error == -1 Then ExitLoop
Execute($line)
WEnd
FileClose($file)
EndFunc

Func message($text)
msgbox(0,0,$text)
EndFunc

Executeau3('user_code.au3')


user_code.au3
Код:
Assign('text','')
$text = Random(1,100,1)
message($text)
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
Global $pArray[5] = [0,0,0,0,0]

Func Executeau3($filename)
    $file = FileOpen($filename)
    While 1
        $line = FileReadLine($file)
        If @error == -1 Then ExitLoop
        Execute($line)
    WEnd
    FileClose($file)
EndFunc

Func message()
    For $i = 0 To 4 Step 1
        MsgBox(0,0,$pArray[$i])
    Next
EndFunc

Executeau3('user_code.au3')


user_code.au3
Код:
$pArray[0] = "test"
$pArray[1] = "test1"
$pArray[2] = "test2"
$pArray[3] = "test3"
$pArray[4] = "test4"
message()
Массиву можно дать имя к примеру "userVars", только таким способом скрипту можно передать значение большого кол-ва переменных без предварительного сорения в шапке скрипта. Ну или Assign.
 
Автор
I

Ilyialat

Новичок
Сообщения
54
Репутация
2
А ну над этим я думал
фкн Var
Код:
Dim $VarArray[999][2]
Func Var($var, $value = '-')
if $value == '-' Then
For $i = 1 to UBound($VarArray)-1
if $VarArray[$i][0]=$value Then
Return $VarArray[$i][1]
EndIf
Else
For $i=1 to UBound($VarArray)-1
if $VarArray[$i][0]=$value Then
$VarArray[$i][1]=$value
return 1
EndIf
Next
$VarArray[$i+1,0]= $var
$VarArray[$i+1,1]= $value
EndIf
EndFunc
 
Автор
I

Ilyialat

Новичок
Сообщения
54
Репутация
2
Слишком тяжело разобрать мне код без комментов :smile:
У меня есть код, работающий с переменными через .ini файл =)
Но всё равно спасибо=)
Вопрос - почему Execute("$b = 0") не работает?
 
Автор
I

Ilyialat

Новичок
Сообщения
54
Репутация
2
Может быть... А надо мне это для следующего...
Хочу сделать платформу, похожую на ЕленаБот...
Она использует ImageSearch.dll
Специально для dll написано дополнение
Там есть кэш координат(полезная вещь!), тыканье в случайные места битмапа с различной скоростью с шансом промаха... Вот я и тружусь =)
 
Верх