Что нового

Работа с If, Else, ElseIf, EndIf где моя ошибка?

DOMINANT

Новичок
Сообщения
42
Репутация
0
Добрый вечер друзья! Ниже привожу кусок кода, замысел думаю будет понятен по комментариям, все работало отлично до того как я попытался в первом блоке вписать ElseIf, может нужно в моем случае использовать Else? Или я где то забыл EndIf дописать?

Код:
; Первый блок ищем совпадения через StringRegExp
If StringRegExp($Replace7, '(АБВ|абв)', 0) Then ; Если найдено совпадение опускаемся в этом первом блоке, если нет идём на второй блок
   If StringRegExp($Replace7, '(КАВ|кав)', 0) Then ; Если найдено совпадение выполняем, если нет делаем ElseIf
              ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZZP, 0)
   ElseIf
              ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZEP, 0)
                        Sleep(250)
              ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
   Sleep(250)
ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
Else ; Второй блок если в первом неудача
   If StringRegExp($Replace7, '(АБВ|абв)', 0) Then 
  		 ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchPVK, 0)
  		 Sleep(250)
 	  ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
   Sleep(250)
   ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
Else ; Третий блок если во втором неудачно
   If StringRegExp($Replace7, '(АБВ|абв)', 0) Then 
  	 ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchNSTC, 0)
  		 Sleep(250)
  		 ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
   	Sleep(250)
   ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
Endif
Endif
Endif
Endif
 

hedji

Продвинутый
Сообщения
409
Репутация
94
И Endif забыли и ElseIf подразумевает проверку условия, которого нет.

Код:
; Первый блок ищем совпадения через StringRegExp
If StringRegExp($Replace7, '(АБВ|абв)', 0) Then ; Если найдено совпадение опускаемся в этом первом блоке, если нет идём на второй блок
	If StringRegExp($Replace7, '(КАВ|кав)', 0) Then ; Если найдено совпадение выполняем, если нет делаем ElseIf
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZZP, 0)
	Else
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZEP, 0)
		Sleep(250)
		ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
		Sleep(250)
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
	Endif
Else ; Второй блок если в первом неудача
	If StringRegExp($Replace7, '(АБВ|абв)', 0) Then
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchPVK, 0)
		Sleep(250)
		ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
		Sleep(250)
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
	Else ; Третий блок если во втором неудачно
		If StringRegExp($Replace7, '(АБВ|абв)', 0) Then
			ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchNSTC, 0)
			Sleep(250)
			ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
			Sleep(250)
			ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
		Endif
	Endif
EndIf
 
Автор
DOMINANT

DOMINANT

Новичок
Сообщения
42
Репутация
0
hedji сказал(а):
И Endif забыли и ElseIf подразумевает проверку условия, которого нет.

Код:
; Первый блок ищем совпадения через StringRegExp
If StringRegExp($Replace7, '(АБВ|абв)', 0) Then ; Если найдено совпадение опускаемся в этом первом блоке, если нет идём на второй блок
	If StringRegExp($Replace7, '(КАВ|кав)', 0) Then ; Если найдено совпадение выполняем, если нет делаем ElseIf
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZZP, 0)
	Else
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZEP, 0)
		Sleep(250)
		ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
		Sleep(250)
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
	Endif
Else ; Второй блок если в первом неудача
	If StringRegExp($Replace7, '(АБВ|абв)', 0) Then
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchPVK, 0)
		Sleep(250)
		ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
		Sleep(250)
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
	Else ; Третий блок если во втором неудачно
		If StringRegExp($Replace7, '(АБВ|абв)', 0) Then
			ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchNSTC, 0)
			Sleep(250)
			ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
			Sleep(250)
			ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
		Endif
	Endif
EndIf

Тоесть в моем случае должно выглядеть так?

Код:
If УСЛОВИЕ 1 БЛОКА 1 Then
  If УСЛОВИЕ 2 БЛОКА 1 Then
     ДЕЛАЕМ ЭТО
ElseIf УСЛОВИЕ ДЛЯ ИНАЧЕ 3 БЛОКА 1 Then
     ДЕЛАЕМ ЭТО
EndIf
EndIf
EndIf
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
DOMINANT

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


С уважением, ваш Глобальный модератор.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Тоесть в моем случае должно выглядеть так?
Нет, вот так :
Код:
If УСЛОВИЕ 1 БЛОКА 1 Then
	If УСЛОВИЕ 2 БЛОКА 1 Then
		ДЕЛАЕМ ЭТО
	EndIf
ElseIf УСЛОВИЕ ДЛЯ ИНАЧЕ 3 БЛОКА 1 Then
	ДЕЛАЕМ ЭТО
EndIf
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Код:
If УСЛОВИЕ 1 БЛОКА 1 Then   
	ДЕЛАЕМ РАЗ    
ElseIf УСЛОВИЕ 2 БЛОКА 1 Then
	ДЕЛАЕМ ДВА 
ElseIf УСЛОВИЕ 3 БЛОКА 1 Then
	ДЕЛАЕМ ТРИ
Else ;ни одно из трех условий не выполнилось
	ДЕЛАЕМ ЧЕТЫРЕ 
EndIf
 
Автор
DOMINANT

DOMINANT

Новичок
Сообщения
42
Репутация
0
Переход во второй блок будет такой?

Код:
If УСЛОВИЕ 1 БЛОКА 1 Then   
    ДЕЛАЕМ РАЗ    
ElseIf УСЛОВИЕ 2 БЛОКА 1 Then
    ДЕЛАЕМ ДВА 
ElseIf УСЛОВИЕ 3 БЛОКА 1 Then
    ДЕЛАЕМ ТРИ
Else ; Здесь переходим во второй блок если УСЛОВИЕ 1 БЛОКА 1 не удачно?
    If УСЛОВИЕ 1 БЛОКА 2 Then   
    ДЕЛАЕМ РАЗ    
ElseIf УСЛОВИЕ 2 БЛОКА 2 Then
    ДЕЛАЕМ ДВА 
ElseIf УСЛОВИЕ 3 БЛОКА 2 Then
    ДЕЛАЕМ ТРИ
EndIf
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Код:
If УСЛОВИЕ 1 БЛОКА 1 Then   
    ДЕЛАЕМ РАЗ    
ElseIf УСЛОВИЕ 2 БЛОКА 1 Then
    ДЕЛАЕМ ДВА 
ElseIf УСЛОВИЕ 3 БЛОКА 1 Then
    ДЕЛАЕМ ТРИ
Else ; переходим во второй блок если НИ ОДНО ИЗ 3 условий первого блока не выполнилось
    If УСЛОВИЕ 1 БЛОКА 2 Then   
		ДЕЛАЕМ РАЗ    
	ElseIf УСЛОВИЕ 2 БЛОКА 2 Then
		ДЕЛАЕМ ДВА 
	ElseIf УСЛОВИЕ 3 БЛОКА 2 Then
		ДЕЛАЕМ ТРИ
	EndIf
	;если ни одно из 3 условий  блока 2 не выполнилось - выходим из скрипта, так ничего и не сделав
EndIf
 
Автор
DOMINANT

DOMINANT

Новичок
Сообщения
42
Репутация
0
А в таком варианте он в первом блоке все 3 условия проверяет прежде чем перейти во второй блок? Я как вижу, чтобы зайти в первый блок нужна ИСТИНА в УСЛОВИИ 1 БЛОК 1, и только тогда он продолжает работу в первом блоке, а иначе если в УСЛОВИИ 1 БЛОК 1 = ЛОЖЬ, то переходит к проверке УСЛОВИЯ 1 БЛОК 2. Я правильно понимаю данную конструкцию?
 
Автор
DOMINANT

DOMINANT

Новичок
Сообщения
42
Репутация
0
Ну конечно я читал, и перечитывал по много раз :smile:))
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
DOMINANT, условия проверяются до первой "ИСТИНЫ", или-же если всё "ЛОЖЬ", то выполняется блок "Else", внутри блока "Else" та же логика - проверка условий до первой "ИСТИНЫ".
В примере выше выполняется проверка "УСЛОВИЕ 1 БЛОКА 1", если "Истина", то выполняется "ДЕЛАЕМ РАЗ " и больше никаких проверок не выполняет, если "Ложь" - выполняется проверка следующего "ElseIf", то есть "УСЛОВИЕ 2 БЛОКА 1" и опять же , если "Истина" - выполняется "ДЕЛАЕМ ДВА" и выход из "If" , если "Ложь" , то проверяется следующее условие "ElseIf" , если оно есть итд. Если все условия "Ложь" , то выполняются действия после "Else".
перейти во второй блок?
Таким образом условие , при котором будет выполняться проверка условий второго блока - ложь во всех условиях "БЛОКА 1"
 
Автор
DOMINANT

DOMINANT

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

Код:
If StringRegExp($Replace7, '(000|111)', 0) Then ; Первый блок если здесь ложь идём во второй блок, если истина работаем ниже в этом первом блоке и выходим
   If StringRegExp($Replace7, '(ААА|ааа)', 0) Then
              ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZZP, 0)
              Sleep(250)
              ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
              Sleep(250)
              ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
   ElseIf StringRegExp($Replace7, '(БББ|ббб)', 0) Then
              ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZEP, 0)
              Sleep(250)
              ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
              Sleep(250)
              ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
  Else
   If StringRegExp($Replace7, '(222|333)', 0) Then ; Второй блок если здесь ЛОЖЬ идём в третий блок которого здесь ПОКА нет))), если ИСТИНА работаем в этом втором блоке и выходим
              If StringRegExp($Replace7, '(ААА|ааа)', 0) Then
              ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchPVK_ZZP, 0)
              Sleep(250)
              ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
              Sleep(250)
              ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
   ElseIf StringRegExp($Replace7, '(БББ|ббб)', 0) Then
              ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchPVK_ZEP, 0)
              Sleep(250)
              ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
              Sleep(250)
              ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
  EndIf
  EndIf
  EndIf
  EndIf
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Так пробуйте:
Код:
If StringRegExp($Replace7, '(000|111)', 0) Then ; Первый блок если здесь ложь идём во второй блок, если истина работаем ниже в этом первом блоке и выходим
	If StringRegExp($Replace7, '(ААА|ааа)', 0) Then
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZZP, 0)
		Sleep(250)
		ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
		Sleep(250)
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
	ElseIf StringRegExp($Replace7, '(БББ|ббб)', 0) Then
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZEP, 0)
		Sleep(250)
		ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
		Sleep(250)
		ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
	EndIf
Else
	If StringRegExp($Replace7, '(222|333)', 0) Then ; Второй блок если здесь ЛОЖЬ идём в третий блок которого здесь ПОКА нет))), если ИСТИНА работаем в этом втором блоке и выходим
		If StringRegExp($Replace7, '(ААА|ааа)', 0) Then
			ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchPVK_ZZP, 0)
			Sleep(250)
			ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
			Sleep(250)
			ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
		ElseIf StringRegExp($Replace7, '(БББ|ббб)', 0) Then
			ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchPVK_ZEP, 0)
			Sleep(250)
			ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
			Sleep(250)
			ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
		EndIf
	EndIf

EndIf
У Вас "If" во второй строке не закрыта была.
Вы ведь пользуетесь SciTE ? Возьмите за правило , иногда выполнять "Tidy Autoit Sourse" в пункте меню "Tools" - и ошибки покажет и пробелы в строках выставит для легкого прочтения скрипта
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
а можно и так :shaman_s_bubnom:
Код:
Select
	Case StringRegExp($Replace7, '(000|111)') = 1
		Select
			Case StringRegExp($Replace7, '(ААА|ааа)') = 1
				ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZZP, 0)
				Sleep(250)
				ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
				Sleep(250)
				ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
			Case StringRegExp($Replace7, '(БББ|ббб)') = 1
				ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchMMU_ZEP, 0)
				Sleep(250)
				ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
				Sleep(250)
				ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
		EndSelect
	Case StringRegExp($Replace7, '(222|333)') = 1
		Select
			Case StringRegExp($Replace7, '(ААА|ааа)')
				ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchPVK_ZZP, 0)
				Sleep(250)
				ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
				Sleep(250)
				ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
			Case StringRegExp($Replace7, '(БББ|ббб)')
				ControlSetText($varSaveAs, "", "[CLASS:Edit]", $patchPVK_ZEP, 0)
				Sleep(250)
				ControlClick("[TITLE:Сохранить как]", "", "[CLASS:Button]", "left", 1)
				Sleep(250)
				ControlSetText($varSaveAs, "", "[CLASS:Edit]", $Replace7, 0)
		EndSelect
	Case Else ;произошло все, что угодно, но не первые два условия(Case)

EndSelect
 
Верх