Оператор do
Пример использования exit
Синтаксис оператора exit
Оператор exit
Пример оператора CASE
report ztx1005.
parameters f1 type i default 2.
case f1.
when 1. write / 'f1 = 1'.
when 2. write / 'f1 = 2'.
when 3. write / 'f1 = 3'.
when others. write / 'f1 is not 1, 2, or 3'.
endcase.
* The following code is equivalent to the above case statement
if f1 = 1. write / 'f1 = 1'.
elseif f1 = 2. write / 'f1 = 2'.
elseif f1 = 3. write / 'f1 = 3'.
else. write / 'f1 is not 1, 2, or 3'.
endif.
f1 = 2
f1 = 2
Оператор exit препятствует тому дальнейшему выполнению операторов.
exit.
report ztx1006.
write: / 'Hi'.
exit.
write: / 'There'.
Hi
exit может использоваться во многих ситуациях. В пределах цикла он прерывает дальнейшую обработку цикла в операторах loop, select, do, while.
Синтаксис оператора do:
do [ v1 times ] [ varying f1 from s-c1 next s-c2 [ varying f2 from s2-c1 next s2-c2... ] ].
---
[exit.]
---
enddo.
где
· v1 – переменная, литерал или постоянная.
· s – Field String, имеющая компоненты c1 и c2.
· f1 – переменная. Компоненты s должны быть такого типа, который может быть преобразован к типу данных и длине f1.
·... представляет любое число varying выражений.
· --- представляет любое число строк программы.
|
|
Особенности использования оператора:
· циклы do могут быть вложены неограниченное число раз.
· exit предотвращает дальнейшую обработку цикла и выходит немедленно из текущего цикла. Он не заканчивает программу, когда находится в цикле do. Управление передается следующему оператору после enddo.
· Вы можете создать бесконечный цикл do не задавая дополнений. В этом случае используйте exit внутри цикла, чтобы закончить его обработку.
· Изменение значения v1 внутри цикла не затрагивает обработку цикла.
Внутри цикла sy-index содержит текущее число итераций. При первом выполнений цикла sy-index будет 1. При втором sy-index будет 2, и так далее. После enddo, sy-index содержит значение, которое он имел прежде до начала цикла. Во вложенных циклах do, sy-index содержит итеративное число цикла, в котором он используется.
report ztx1007.
sy-index = 99.
write: / 'before loop, sy-index =', sy-index, / ''.
do 5 times.
write sy-index.
enddo.
write: / 'after loop, sy-index =', sy-index, / ''.
do 4 times.
write: / 'outer loop, sy-index =', sy-index.
do 3 times.
write: / ' inner loop, sy-index =', sy-index.
enddo.
enddo.
write: / ''. "new line
do 10 times.
write sy-index.
if sy-index = 3.
exit.
endif.
enddo.
before loop, sy-index = 99
1 2 3 4 5
after loop, sy-index = 99
outer loop, sy-index = 1
inner loop, sy-index = 1
inner loop, sy-index = 2
inner loop, sy-index = 3
outer loop, sy-index = 2
inner loop, sy-index = 1
inner loop, sy-index = 2
inner loop, sy-index = 3
outer loop, sy-index = 3
inner loop, sy-index = 1
inner loop, sy-index = 2
inner loop, sy-index = 3
outer loop, sy-index = 4
inner loop, sy-index = 1
inner loop, sy-index = 2
inner loop, sy-index = 3
1 2 3
Изменения, сделанные в значении sy-index, не затрагивают управление цикла. Например, если записать, do 10 times и во время самого первого прохода цикла установить значение sy-index 11, то оно будет сброшено в 1, затем увеличено к 2, и цикл продолжит обрабатываться, как будто Вы не изменяли его вообще.