Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Глобальные переменные (?) (http://forum.oszone.net/showthread.php?t=146462)

Frost_Imp 28-07-2009 15:14 1179827

Глобальные переменные (?)
 
Всем доброго времени суток!
Возник у меня вопрос следующего характера: есть функция, которая определяет границы прямоугольника PixelCheckSum
Код:

MsgBox(0, "Определение маяков", "Через 5 секунд указатель должен быть на левой границе маяков")
sleep(5000)
$mayak1 = MouseGetPos()
$coord = PixelGetColor( $mayak1[0] , $mayak1[1] )
_FileWriteLog(@ScriptDir & "\log.txt","Левая граница маяков " & $mayak1[0])
MsgBox(0,"Определение левой границы маяков завершено ", $mayak1[0] )
sleep (1000)

Указанный код, разумеется, для одной из границы, он повторяется еще три раза. В этой функции меня интересуюи переменные $mayak1[0] , $mayak1[1] и другие.
Делаю, собственно, чексумм
Код:

$norm_beacon = PixelChecksum ( $mayak1[0], $mayak2[1], $mayak3[0], $mayak4[1], 1 )
Вначале скрипта я объявляю эти переменные как глобальные
Код:

Global $mayak1[0]
Global $mayak2[1]
Global $norm_beacon

Потом пытаюсь использовать в другой функции при сравнении сумм пикселей
Код:

$querty_beacon = PixelChecksum ( $mayak1[0], $mayak2[1], $mayak3[0], $mayak4[1], 1 )
_FileWriteLog(@ScriptDir & "\log.txt","Контрольная сумма пикселей при проверке " & $querty_beacon)
if $querty_beacon = $norm_beacon Then

и получаю ошибку
Array variable subscript badly formatted.:
Global $mayak1[0]
Global $mayak1[^ ERROR
Что я делаю не так?

Frost_Imp 28-07-2009 15:30 1179841

И сразу вопрос вдогонку, как может получиться в SciTE, что по ctrl+F5 пишет
0 error(s), 0 warning(s)
а при попытке запуска скрипта выдает
Array variable subscript badly formatted.:
global $pos1[0], $pos1[1], $pos2[0], $pos2[1], $pos3[0], $pos3[1], $pos4[0], $pos5[0], $pos5[1], $pos6[0], $pos6[1]
global $pos1[^ ERROR

Или нельзя декларировать переменные вида
$pos1[0] то есть со значением в квадратных скобках? Такие переменные появляются при определении координат позиции курсора. Как мне тогда сохранить эти координаты, чтоб эти значение можно было использовать в других функциях одного скрипта?
P.S. Вероятно, это более понятное изложение вопроса, который я задал в первом посте =)

amel27 28-07-2009 16:07 1179859

Цитата:

Цитата Frost_Imp
получаю ошибку
Array variable subscript badly formatted.:
Global $mayak1[0]
Global $mayak1[^ ERROR
Что я делаю не так? »

пытаетесь объявить одномерный массив размерностью 0, объявляйте просто "Global $mayak1", а тип данных (одномерный массив размерности 2) будет задан функцией MouseGetPos()

Цитата:

Цитата Frost_Imp
Такие переменные появляются при определении координат позиции курсора »

как уже сказал, получаете объявление не переменных, а массивов - в объявлении тип данных указывать не обязательно

Frost_Imp 28-07-2009 16:33 1179881

То есть вместо
global $pos1[0], $pos1[1], $pos2[0], $pos2[1], $pos3[0], $pos3[1], $pos4[0], $pos5[0], $pos5[1], $pos6[0], $pos6[1]
пишем
global $pos1, $pos2, $pos3, $pos4, $pos5, $pos6
?
Спрашиваю, так как пока нет возможности проверить ксрипт на деле. Дебагер ошибку выдавать вроде перестал...
Просто если я объявляю $pos1, а использую значение $pos1[1] - это нормально?

Creat0R 28-07-2009 16:48 1179894

Цитата:

Цитата Frost_Imp
если я объявляю $pos1, а использую значение $pos1[1] - это нормально? »

Не совсем. Выдача ошибки полностью зависит от успеха функции «MouseGetPos()», т.е нужно ещё проверять если она вернула массив:

Код:

$mayak1 = MouseGetPos()
If IsArray($mayak1) Then PixelChecksum(...)

Цитата:

Цитата Frost_Imp
как может получиться в SciTE, что по ctrl+F5 пишет
0 error(s), 0 warning(s)
а при попытке запуска скрипта выдает
Array variable subscript badly formatted.: »

Очень просто - первое это проверка синтаксиса, а с синтаксисом в этом случае всё в порядке, тут проблема образуется на лету, для это и нужно делать что называется Error Checking (проверки на ошибочность - см. пример выше).
Хм, действительно, это видимо недочёт проверки синтаксиса.

amel27 28-07-2009 17:02 1179906

Цитата:

Цитата Creat0R
т.е нужно ещё проверять если она вернула массив »

ИМХО это перебор, конкретно для MouseGetPos() не предусмотрен такой исход ;)
...хотя для большинства других ф-ций это необходимо - надо смотреть справку

Creat0R 28-07-2009 17:10 1179912

Цитата:

Цитата amel27
конкретно для MouseGetPos() не предусмотрен такой исход »

Знаю... мне просто показалось что Frost_Imp указывает именно на эту ошибку, но сейчас я перечитал его сообщения, и понял что ошибка совсем в другом - в некорректном объявлении переменных (на что ты сразу и указал :) ).

Тогда я пожалуй поправлю свой ответ на вопрос о несхожести проверки синтаксиса...

Frost_Imp 29-07-2009 09:28 1180411

Цитата:

Цитата amel27
пытаетесь объявить одномерный массив размерностью 0, объявляйте просто "Global $mayak1", а тип данных (одномерный массив размерности 2) будет задан функцией MouseGetPos() »

Благодарю! Этот совет помог!

Creat0R 29-07-2009 15:12 1180704

Цитата:

Цитата Frost_Imp
Благодарю! Этот совет помог! »

Для благодарностей есть ссылка под каждым сообщением: Полезное сообщение :)


Время: 01:54.

Время: 01:54.
© OSzone.net 2001-