Что нового

Переход к следующему шагу цикла при определенном условии

Dotacka

Новичок
Сообщения
37
Репутация
0
Добрый день!
Подскажите пожалуйста как перейти к следующему шагу цикла при определенном условии

есть некий цикл
Код:
For $i = 1 To 40 Step 1


Мне нужно что бы если например в цикле произошло $main = 1 цикл перешел к следующему шагу не заканчивая текущий шаг.

Как это можно сделать?
Спасибо
 

Alecsis

Осваивающий
Сообщения
101
Репутация
41
Код:
If main = 1 Then ContinueLoop

см, также справку… :acute:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
If main = 1 Then ContinueLoop

см, также справку… :acute:
Так автору же нужно не заканчивая шаг...
Возможно требуется обращение к следующему элементу, тогда нужно использовать $i + 1.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ну так шаг это все что между For...Next
а ContinueLoop позволяет не доходить до Next. То есть, все, что ниже ContinueLoop выполняться не будет
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Ну да, тут можно понять двусмысленно.
"Не заканчивая текущий шаг" может трактоваться как "Не завершая/выполняя текущий шаг", а может и как "Не прерывая текущий шаг" :stop:.
 

Alecsis

Осваивающий
Сообщения
101
Репутация
41
Так если хотим уползти от »двусмысленностей» © CreatoR, неплохо бы увидеть, что и зачем творится в цикле. И таки да, что именно означает авторсое выражение «не заканчивая текущий шаг»?
 
Автор
D

Dotacka

Новичок
Сообщения
37
Репутация
0
Так если хотим уползти от »двусмысленностей» © CreatoR, неплохо бы увидеть, что и зачем творится в цикле. И таки да, что именно означает авторсое выражение «не заканчивая текущий шаг»?

Cпасибо.
"Не заканчивая шаг" - имелось ввиду пропустить все между ContinueLoop и next
Сообщение автоматически объединено:

Ну да, тут можно понять двусмысленно.
"Не заканчивая текущий шаг" может трактоваться как "Не завершая/выполняя текущий шаг", а может и как "Не прерывая текущий шаг" :stop:.

Cпасибо.
Нет- я имел ввиду первую трактовку.
Сообщение автоматически объединено:

Cпасибо.
"Не заканчивая шаг" - имелось ввиду пропустить все между ContinueLoop и next
Сообщение автоматически объединено:



Cпасибо.
Нет- я имел ввиду первую трактовку.

Спасибо вам за помощь.
Но у меня возникла проблема в интеграции этой функции.
У меня условие
Код:
if $main = 1 Then continueloop


Закопано внутри нескольких циклов
Код:
For $i = 1 To 40 Step 1
if
текст
If
For $m = 1 To 40 Step 1
текст
if $main = 1 Then continueloop
next
endif
endif

next

У меня задача состоит в том что бы при $main = 1 перейти к следующему шагу именно самого первого цикла - который является общим для всего скрипта

А условие закопано внутри маленьких подциклов - в итоге ContinueLoop завершает тот подцикл в которм он стоит.
 
Последнее редактирование:
Автор
D

Dotacka

Новичок
Сообщения
37
Репутация
0
Простыми словами мою задачу можно понять так: Если где-то глубоко внутри скрипта что-то не срослось -Нужно перейти к первой строчке к самому первому циклу - посчитав текущий шаг выполненым (оперативно его прервав)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
смотри справку
Код:
ExitLoop
 

IMStrelcov

CTPEJIbLLOB
Сообщения
258
Репутация
66
Код:
For $a = 1 to 100
    For $b=1 to 100
        ExitLoop;вернутся к началу For $a=1 to 100
        For $c=1 to 100
            ExitLoop;вернутся к началу For $b=1 to 100
            ExitLoop 2;вернутся к началу For $a=1 to 100
            For $d=1 to 100
                ExitLoop;вернутся к началу For $c=1 to 100
                ExitLoop 2;вернутся к началу For $b=1 to 100
                ExitLoop 3;вернутся к началу For $a=1 to 100
            Next
        Next
    Next
Next
 

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
Код:
For $a = 1 to 100
    For $b=1 to 100
        ExitLoop;вернутся к началу For $a=1 to 100
        For $c=1 to 100
            ExitLoop;вернутся к началу For $b=1 to 100
            ExitLoop 2;вернутся к началу For $a=1 to 100
            For $d=1 to 100
                ExitLoop;вернутся к началу For $c=1 to 100
                ExitLoop 2;вернутся к началу For $b=1 to 100
                ExitLoop 3;вернутся к началу For $a=1 to 100
            Next
        Next
    Next
Next
Вы уверены?
Эксперимент:
Код:
For $b = 1 To 4
    ConsoleWrite('>($b = ' & $b & ') Начало    For $b= ...' & @LF)
    For $c = 1 To 2
        ConsoleWrite('>($b = ' & $b & ') Начало    For $c= ...' & @LF)
        If $b = 1 Then ExitLoop
        For $d = 1 To 1
            If $b = 2 Then ExitLoop
            If $b = 3 Then ExitLoop 2
            If $b = 4 Then ExitLoop 3
        Next
        ConsoleWrite('<($b = ' & $b & ') Конец    For $c= ...' & @LF)
    Next
    ConsoleWrite('<($b = ' & $b & ') Конец    For $b= ...' & @LF)
Next
ConsoleWrite('<($b = ' & $b & ') Выход' & @LF)
В большинстве случаев это не важно "к началу" или "к концу", но не в подобных ситуациях.
а ContinueLoop позволяет не доходить до Next. То есть, все, что ниже ContinueLoop выполняться не будет
 
Последнее редактирование:
Автор
D

Dotacka

Новичок
Сообщения
37
Репутация
0
Код:
For $a = 1 to 100
    For $b=1 to 100
        ExitLoop;вернутся к началу For $a=1 to 100
        For $c=1 to 100
            ExitLoop;вернутся к началу For $b=1 to 100
            ExitLoop 2;вернутся к началу For $a=1 to 100
            For $d=1 to 100
                ExitLoop;вернутся к началу For $c=1 to 100
                ExitLoop 2;вернутся к началу For $b=1 to 100
                ExitLoop 3;вернутся к началу For $a=1 to 100
            Next
        Next
    Next
Next

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

смотри справку
Код:
ExitLoop
Благодарю
 

IMStrelcov

CTPEJIbLLOB
Сообщения
258
Репутация
66
Вы уверены?
Эксперимент:
Код:
For $b = 1 To 4
    ConsoleWrite('>($b = ' & $b & ') Начало    For $b= ...' & @LF)
    For $c = 1 To 2
        ConsoleWrite('>($b = ' & $b & ') Начало    For $c= ...' & @LF)
        If $b = 1 Then ExitLoop
        For $d = 1 To 1
            If $b = 2 Then ExitLoop
            If $b = 3 Then ExitLoop 2
            If $b = 4 Then ExitLoop 3
        Next
        ConsoleWrite('<($b = ' & $b & ') Конец    For $c= ...' & @LF)
    Next
    ConsoleWrite('<($b = ' & $b & ') Конец    For $b= ...' & @LF)
Next
ConsoleWrite('<($b = ' & $b & ') Выход' & @LF)



В большинстве случаев это не важно "к началу" или "к концу", но не в подобных ситуациях.
Да уверен. У вас три цикла, у меня в примере четыре.
 
Автор
D

Dotacka

Новичок
Сообщения
37
Репутация
0
Да уверен. У вас три цикла, у меня в примере четыре.
Добрый день.
Cейчас пробую сделать то что вы предложили- Результат такой:
Код:
For $a = 1 to 100
Cтрока 1
Строка 2  
For $b=1 to 100
Строка 3
Строка 4
if $main = 1 than      
ExitLoop
endif
Строка 5
Строка 6
Next
Строка 7
Строка 8
Next


Cуть в том, что в случае $main = 1 скрипт выполняет строку 7 - а мне нужно перейти после ExitLoop к строке 1....
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
For $a = 1 To 100
    Cтрока 1
    Строка 2
    For $b = 1 To 100
        Строка 3
        Строка 4
        If $main = 1 Then
            ContinueLoop 2
        EndIf
        Строка 5
        Строка 6
    Next
    Строка 7
    Строка 8
Next


Справку будем читать?
 
Верх