Что нового

Границы циклов и условий

joker2d

Новичок
Сообщения
182
Репутация
0
Не могу разобраться как в Autoit определяются границы для условий и циклов

когда пишу условие if /код условия/ EndIf в одну строчку то все работает, а если переношу EndIf на другую строку энтером то скрипт вылетает с ошибкой Erorr EndIf statment with no matching If statment. Все условия чтоли в одну строчку надо писать ? это же не удобно

С циклами тоже непонятно

Как вообще писать чтобы условия и циклы видели где я им ставлю конец

В других языках программирования для циклов и условий всегда использовал скобки и как то не могу понять как же все таки это работает в аутоит
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
joker2d
открой справку и посмотри синтаксис для условного оператора. в твоем случае, видится мне, что ты просто Then EndIf забываешь ставить после условия. это ключевое слово которое нужно опустить, если выражение однострочное.
с циклами тоже все просто.
Код:
If $something Then
     ; something
ElseIf $anotherthing Then
    ; another thing
Else
    ; All other cases
EndIf
;------------
For $i = $istart To $iend Step $step
    ;Do something until $i = $iend
Next
;-----------
While $something
    ; Do something
WEnd
;-----------
Do
    ; Do something
Until $something
 
Автор
J

joker2d

Новичок
Сообщения
182
Репутация
0
ну такие примеры слишком простые все как бы понятно но вот например

почему не работает этот скрипт вылетает с ошибкой

Код:
Opt("WinTitleMatchMode", 2) 

	While 1
	$massiv_vseh_okon = WinList()
	For $i = 1 to $massiv_vseh_okon[0][0]	
	If StringInStr($massiv_vseh_okon[$i][0], 'Калькулятор') Then 
	WinActivate($massiv_vseh_okon[$i][0])	
	Next
	WEnd



А вот этот код работает

Код:
Opt("WinTitleMatchMode", 2) 

	While 1
	$massiv_vseh_okon = WinList()
	For $i = 1 to $massiv_vseh_okon[0][0]	
	If StringInStr($massiv_vseh_okon[$i][0], 'Калькулятор') Then WinActivate($massiv_vseh_okon[$i][0])	
	Next
	WEnd


разница только в том что после Then в неработающем примере есть энтер, а во втором его нет

В таком простом случае я могу и не ставить enter но в реальном скрипте условия намного сложнее и писать все в одну строку не удобно
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
joker2d [?]
ну такие примеры слишком простые все как бы понятно
так если все понятно, чего не следуешь инструкциям? я в посте выше написал, как должен быть устроен условный оператор. мне не понятно, почему ты не можешь сделать того же самого.
Код:
Opt("WinTitleMatchMode", 2)
While 1
    $massiv_vseh_okon = WinList()
    For $i = 1 to $massiv_vseh_okon[0][0]  
        If StringInStr($massiv_vseh_okon[$i][0], 'Калькулятор') Then
            WinActivate($massiv_vseh_okon[$i][0])  
        EndIf
    Next
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
joker2d [?]
в реальном скрипте условия намного сложнее
Если тебе удалось построить столь сложные условия, то мне не понятно как ты не разобрался с синтаксисом?

У однострочного If нету EndIf, а у многострочного обязан быть.
 
Автор
J

joker2d

Новичок
Сообщения
182
Репутация
0
И еще небольшой вопрос правильно понимаю все закрывающие элементы EndIf Next итд надо писать с новой строчки и чтобы они были единственным кодом в этой строчке ?

то есть если писать



Код:
Opt("WinTitleMatchMode", 2) 
While 1
	$massiv_vseh_okon = WinList()
	For $i = 1 to $massiv_vseh_okon[0][0]	
	If StringInStr($massiv_vseh_okon[$i][0], 'Калькулятор') Then 
		WinActivate($massiv_vseh_okon[$i][0])	
	EndIf Next
WEnd


опять будет ошибка, а если EndIf Next разделить на две строки то все ок.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
joker2d [?]
правильно понимаю все закрывающие элементы EndIf Next итд надо писать с новой строчки и чтобы они были единственным кодом в этой строчке ?
Да.
 
Автор
J

joker2d

Новичок
Сообщения
182
Репутация
0
И еще один момент скорее для себя чтобы не забыть
в условии после Then нужно начинать новую строку иначе опять вылетает какая то ошибка :shok:

Не знаю почему это не пишут в мануале по аутоит большими буквами, по моему совсем не очевидные моменты
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
joker2d [?]
в условии после Then нужно начинать новую строку
Не обязательно:

Однострочное условие:
Код:
If $i = 1 Then MsgBox(0, '', '1')

тут всё понятно?
или
Многострочное условие:
Код:
If $i = 1 Then ;Тут кроме комментария строки не должно быть ничего
    MsgBox(0, '', '1')
EndIf

а тут понятно?


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

И оно есть в справке.
 

AZJIO

Меценат
Меценат
Сообщения
2,878
Репутация
1,194
joker2d
В справке это написано, посмотри пример.И вся справка испещерена кодом содержащим If...EndIf. Введи на вкладке "поиск" в справке EndIf и найдется 50 примеров использования.

почему это не пишут в мануале по аутоит большими буквами
Если всё делать большими буквами, неудобно читать будет.
 
Верх