Что нового

Ошибка в цикле Do Until

Andeangl

Новичок
Сообщения
62
Репутация
4
Добрый вечер!

В ходе разработки скрипта возникла ошибка: Error: "Until" statement with no matching "Do" statement.

Проверил данный участок, причину проблемы не нашёл. Подскажите, пожалуйста, в чём проблема!

Код:
Func _search_coord_by_3_or_3(ByRef $name_ico, $relevant_color, $control_color_1, $control_color_2, $coord_left, $coord_top, $coord_right, $coord_bottom, $_x, $_y, $dopusk, $relevant_color_2, $control_color_2_1, $control_color_2_2)
	Do
		$coord_menu_search_icon = PixelSearch($coord_left, $coord_top, $coord_right, $coord_bottom, $relevant_color, $dopusk)
		If Not @error Then
			If (PixelGetColor($coord_menu_search_icon[0] + $_x, $coord_menu_search_icon[1]) == $control_color_1) Then
				If (PixelGetColor($coord_menu_search_icon[0], $coord_menu_search_icon[1] + $_y) == $control_color_2) Then
					$name_ico[0] = $coord_menu_search_icon[0]
					$name_ico[1] = $coord_menu_search_icon[1]
				EndIf
			EndIf
		Else
			$coord_menu_search_icon = PixelSearch($coord_left, $coord_top, $coord_right, $coord_bottom, $relevant_color_2, $dopusk)
			If Not @error Then
				If (PixelGetColor($coord_menu_search_icon[0] + $_x, $coord_menu_search_icon[1]) == $control_color_2_1) Then
					If (PixelGetColor($coord_menu_search_icon[0], $coord_menu_search_icon[1] + $_y) == $control_color_2_2) Then
						$name_ico[0] = $coord_menu_search_icon[0]
						$name_ico[1] = $coord_menu_search_icon[1]
					EndIf
				EndIf
			Else
			If ($coord_left < $coord_right) Then
				$coord_left = $coord_left + 1
			Else
				If ($coord_top < $coord_bottom) Then
					$coord_top = $coord_top + 1
				Else
					MsgBox(0, "", "Fatal Error. Заданный пиксель не найден!", 5)
				EndIf
			EndIf
		EndIf
	Until ((Not @error) Or ($coord_top = $coord_bottom))

	If ($coord_top = $coord_bottom) Then
		MsgBox(0, "Always bad", "Пиксель не найдён.)
	EndIf
EndFunc

Спасибо!


P.S. Задача функции - поиск изображения по трём заданным точкам. Причём есть два варианта данной комбинации. Пример вызова:

Код:
_search_coord_by_3_or_3($coord_menu_PB, 0xB1B31C, 0xFCFFFF, 0xC7EB62, 260, 10, 1980, 1200, -11, -15, 0, 0x640300, 0xE9FFFF, 0xC4D1F9)


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

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
А Вы проверкой синтаксиса пользоваться умеете? ;)

Код:
>"C:\Program Files (x86)\AutoIt3\SciTE\..\Au3Check.exe" "C:\Program Files (x86)\AutoIt3\SciTE\profile\Untitled 1.au3"
AutoIt3 Syntax Checker v3.3.14.1  Copyright (c) 2007-2013 Tylo & AutoIt Team

"C:\Program Files (x86)\AutoIt3\SciTE\profile\Untitled 1.au3"(31,5) : error: missing EndIf.
    Until
~~~~^
"C:\Program Files (x86)\AutoIt3\SciTE\profile\Untitled 1.au3"(4,27) : REF: missing EndIf.
        If Not @error Then
~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Program Files (x86)\AutoIt3\SciTE\profile\Untitled 1.au3 - 1 error(s), 0 warning(s)
>Exit code: 2    Time: 0.418

В общем Вы один EndIf забыли в коде

Код:
Func _search_coord_by_3_or_3(ByRef $name_ico, $relevant_color, $control_color_1, $control_color_2, $coord_left, $coord_top, $coord_right, $coord_bottom, $_x, $_y, $dopusk, $relevant_color_2, $control_color_2_1, $control_color_2_2)
	Do
		$coord_menu_search_icon = PixelSearch($coord_left, $coord_top, $coord_right, $coord_bottom, $relevant_color, $dopusk)
		If Not @error Then
			If (PixelGetColor($coord_menu_search_icon[0] + $_x, $coord_menu_search_icon[1]) == $control_color_1) Then
				If (PixelGetColor($coord_menu_search_icon[0], $coord_menu_search_icon[1] + $_y) == $control_color_2) Then
					$name_ico[0] = $coord_menu_search_icon[0]
					$name_ico[1] = $coord_menu_search_icon[1]
				EndIf
			EndIf
		Else
			$coord_menu_search_icon = PixelSearch($coord_left, $coord_top, $coord_right, $coord_bottom, $relevant_color_2, $dopusk)
			If Not @error Then
				If (PixelGetColor($coord_menu_search_icon[0] + $_x, $coord_menu_search_icon[1]) == $control_color_2_1) Then
					If (PixelGetColor($coord_menu_search_icon[0], $coord_menu_search_icon[1] + $_y) == $control_color_2_2) Then
						$name_ico[0] = $coord_menu_search_icon[0]
						$name_ico[1] = $coord_menu_search_icon[1]
					EndIf
				EndIf
			Else
				If ($coord_left < $coord_right) Then
					$coord_left = $coord_left + 1
				Else
					If ($coord_top < $coord_bottom) Then
						$coord_top = $coord_top + 1
					Else
						MsgBox(0, "", "Fatal Error. Заданный пиксель не найден!", 5)
					EndIf
				EndIf
			EndIf
		EndIf
	Until ((Not @error) Or ($coord_top = $coord_bottom))

	If ($coord_top = $coord_bottom) Then
		MsgBox(0, "Always bad", "Пиксель не найдён.")
	EndIf
EndFunc   ;==>_search_coord_by_3_or_3
 
Автор
A

Andeangl

Новичок
Сообщения
62
Репутация
4
Medic84 сказал(а):
А Вы проверкой синтаксиса пользоваться умеете? ;)

Нашёл, всё заработало, большое спасибо! =))

P.S. Честно говоря, не умел этим пользоваться ... Но вроде более-менее разобрался =)
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Andeangl

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Администратор.
 
Верх