Что нового

Ошибка ""Else" statement with no matching "If" statement"

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Добрый день всем. Указанная в заглавии темы ошибка есть в описании фатальных ошибок. Означает: "Оператор "If" не имеет сопровождающий его оператор "EndIf" ". Пробовал вставлять EndIf, но выскакивает аналогичная проблема.
Вообще задача стоит выбрать папку по нажатию одной кнопки, запомнить (записать) в файл четыре выбора. На пятом выдать сообщение, что уже есть 4 варианта. Вот, что у меня получается
Код:
#RequireAdmin
#include <GUIConstantsEx.au3>
#include <Date.au3>
#include <WindowsConstants.au3>
#include <Timers.au3>
#include <StaticConstants.au3>
#include <WinAPIProc.au3>
#Include <ScreenCapture.au3>
#include <WinAPI.au3>
#include <Clipboard.au3>
#include <GDIPlus.au3>

Global  $sPS, $sPD
Global $iPid, $iTM
Global $Counter = IniRead("Setting.ini","Statistika","Count","0")

Global $GP = IniRead("Setting.ini","GPat","Pat","")

$hGui = GUICreate('Секундомер', 700, 680, -1, -1, -1, $WS_EX_TOPMOST)
Local $btStart = GUICtrlCreateButton('Старт', 392, 8, 75, 25)
Local $sPathSS = GUICtrlCreateInput('', 8, 96, 325, 21)
Local $sPathS = GUICtrlCreateButton('Откуда', 392, 96, 75, 25)
GUISetState()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE

            ProcessClose($iPid)
            Exit
        Case $sPathS
            GUICtrlSetData($sPathSS, '')
            $sPS = FileSelectFolder('Выбор копируемой папки', '', 0, '', $hGui)
            If Not @error Then GUICtrlSetData($sPathSS, $sPS)
        Case $btStart
            _GetPath()
EndSwitch
WEnd

Func _GetPath()
Local $GPath1 =IniWrite("Setting.ini","Путь1","Путь",'')
Local $GPath2 =IniWrite("Setting.ini","Путь2","Путь",'')
Local $GPath3 =IniWrite("Setting.ini","Путь3","Путь",'')
Local $GPath4 =IniWrite("Setting.ini","Путь4","Путь",'')
  If $GPath1 ='' Then $GPath1 = $sPS
IniWrite("Setting.ini","Путь1","Путь",$sPS)
  ElseIf $GPath2 ='' Then $GPath2 = $sPS
IniWrite("Setting.ini","Путь2","Путь",$sPS)
  Else $GPath3 ='' Then $GPath3 = $sPS
IniWrite("Setting.ini","Путь3","Путь",$sPS)
   EndFunc   ;==>_GetPath
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
В Вашем случае - всё , что после "Then"в одной строке убрать в строку ниже , после "Else" не нужно "Then" и условия " $GPath3 =''" или нужно "ElseIf $GPath3 ='' Then" (не вникал особо в логику, выберите сами нужный вариант)
в конце обязательно "EndIf"
Код:
Func _GetPath()
    Local $GPath1 = IniWrite("Setting.ini", "Путь1", "Путь", '')
    Local $GPath2 = IniWrite("Setting.ini", "Путь2", "Путь", '')
    Local $GPath3 = IniWrite("Setting.ini", "Путь3", "Путь", '')
    Local $GPath4 = IniWrite("Setting.ini", "Путь4", "Путь", '')
    If $GPath1 = '' Then
        $GPath1 = $sPS
        IniWrite("Setting.ini", "Путь1", "Путь", $sPS)
    ElseIf $GPath2 = '' Then
        $GPath2 = $sPS
        IniWrite("Setting.ini", "Путь2", "Путь", $sPS)
    Else
        $GPath3 = $sPS
        IniWrite("Setting.ini", "Путь3", "Путь", $sPS)
    EndIf
EndFunc
 
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Я исправил в первом своём ответе, посмотрите
Вы ведь учитываете то , что если выполнится условие выше, то все условия , что ниже не будут и проверяться ?
 
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
И где же по этой ссылке есть фраза "Оператор "If" не имеет сопровождающий его оператор "EndIf" " ?
Имелось ввиду, что несколько подобных справок прочитал. Но вот таких подробностей, как перенос на другую строку там нет.
Сообщение автоматически объединено:

Вы ведь учитываете то , что если выполнится условие выше, всё то , что ниже не будет и проверяться
Да, именно, если верхнее истинно, то ниже идти не нужно. Спс, сейчас проверю
Сообщение автоматически объединено:

Я исправил в первом своём ответе, посмотрите
Проверил. Почти то, что нужно. Только все пути записывает в третью переменную. И независимо от того, пустая она или нет. Если не пустая, то перезаписывает. Причем, если добавить по тому же принципу четвертую переменную, то начинает писать в неё, но и третью стирает.
 
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Если после "Then" одна операция, то она может быть записана в одну строку и в этом случае "EndIf" не нужно, если несколько или записали в новой строке - тогда обязательно завершить "EndIf"
И независимо от того, пустая она или нет.
Условие "Else" срабатывает в том случае, если все условия выше ложны , возможно в Вашем случае нужно его заменить на
или нужно "ElseIf $GPath3 ='' Then"
Я уже писал, что не вникал в логику работы , просто исправил синтаксические ошибки.
 
Верх