A100
не выполняется.
- это петля с явным счетчиком циклов , что означает, что он знает о последовательности каждой итерации. Что именно происходит, заключается в следующем:
WS-SUB
устанавливается в 1
- Выражение
WS-SUB > WS-SUB-2
оценивается.
- Если
WS-SUB is greater than WS-SUB-2
, то вырваться из цикла и продолжить со следующим утверждением.
- И еще, выполните процедуру
A100
; и наконец WS-SUB
увеличивается на 1.
Потому что в самом начале WS-SUB
больше WS-SUB-2
, преформы утверждение немедленно прекращается, таким образом A100
никогда не выполняется.
Немного сложно понять, что именно вы хотите. Вот несколько предложений:
Если вы хотите A100
быть выполнен по крайней мере один раз, вы можете использовать это:
IF WS-SUB-2 = ZERO
MOVE 1 TO WS-SUB-2
END-IF
Если вы хотите выполнить A100
WS-SUB-2 + 1
раз, а затем либо изменить UNTIL WS-SUB > WS-SUB-2
TO UNTIL WS-SUB > WS-SUB-2 + 1
или сменить FROM 1
на номер FROM 0
.
Нет. Если это последовательные строки кода, например, A100 никогда не будет ВЫПОЛНЕН оттуда. Вы можете * использовать WITH TEST AFTER, что обеспечит вам A100 один раз. Лучше структурировать свой код, чтобы «объяснить» данные, чем скрипка, чтобы уменьшить количество строк кода. –
И если они не являются последовательными строками кода, но WS-SUB-2 равен нулю, когда встречается PERFORM, он не обрабатывается так, как записано, потому что тест выполняется сначала (BEFORE), по умолчанию, а не ПОСЛЕ. –
Я попытался набрать их как отдельные строки, а не всю одну строку, не уверен, почему она вернула их в одну строку, но спасибо. – GuyWithADeathWish