- •Тема 10 «Управляющие операторы»
- •Условный оператор if
- •Преобразование литералов во время сравнений
- •Использование elseif
- •Специальные операторы для символьных строк
- •Оператор выбора case
- •Оператор exit
- •Оператор do
- •Завершение Зацикливания
- •Использование дополнения varying
- •Изменение значений в пределах do ... Varying/enddo
- •Оператор while
- •Оператора continue
- •Оператор check (проверки)
- •Сравнение операторов exit, continue и check
- •Простые форматы оператора write
Оператор выбора case
Синтаксис оператора case.
case v1.
when v2 [ or vn ... ].
---
when v3 [ or vn ... ].
---
[ when others.
--- ]
endcase.
где:
v1 или v2 могут быть переменной, литералом, константой, или Field String.
--- представляет любое число строк программы. Он может содержать пустые строки.
Особенности оператора case:
Только операторы после первого соответствия, when выполняются.
when others выполняется, если ни одно из предшествующих whens не соответствует.
Если when others отсутствует и ни одно из соответствия whens не выполняется, выполняется оператора после endcase.
Выражения не разрешены в операторе.
Field Strings обрабатываются как переменные типа c.
Case очень похож на if/elseif. Единственное различие – то, что в каждом if/elseif, можно определить сложное выражение. В Case можно определить только единственное значение, которое будет сравниваться на равенство.
* Пример оператора 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 препятствует тому дальнейшему выполнению операторов.
Синтаксис оператора exit
exit.
* Пример использования exit
report ztx1006.
write: / 'Hi'.
exit.
write: / 'There'.
Hi
exit может использоваться во многих ситуациях. В пределах цикла он прерывает дальнейшую обработку цикла в операторах loop, select, do, while.
Оператор do
Синтаксис оператора 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 содержит итеративное число цикла, в котором он используется.
* пример использования 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, и цикл продолжит обрабатываться, как будто Вы не изменяли его вообще.