- •Тема 10 «Управляющие операторы»
- •Условный оператор if
- •Преобразование литералов во время сравнений
- •Использование elseif
- •Специальные операторы для символьных строк
- •Оператор выбора case
- •Оператор exit
- •Оператор do
- •Завершение Зацикливания
- •Использование дополнения varying
- •Изменение значений в пределах do ... Varying/enddo
- •Оператор while
- •Оператора continue
- •Оператор check (проверки)
- •Сравнение операторов exit, continue и check
- •Простые форматы оператора write
Оператор check (проверки)
Оператор check используется в пределах цикла. Он может действовать как оператор continue, передавая управление на начало следующей итерации цикла. В отличие от continue он имеет логическое выражение. Если выражение - истина, оно ничего не делает. Если - ложно, то переходит на начало следующей итерации цикла.
1 2 9 10
Синтаксис для оператора check. Он может использоваться в циклах do, while, select, or loop. (Оператор loop рассмотрен в следующей главе).
[do/while/select/loop]
---
check exp.
---
[enddo/endwhile/endselect/endloop]
где:
exp – логическое выражение.
--- представляет любое число строк программы.
Пример использования check. check ведет себя как оператор continue, когда логическое выражение ложно. Если логическое выражение истино, он ничего не делает.
report ztx1014.
parameters p(20) default 'c::\\\xxx\\yyy'.
data: c, "current character
n. "next character
do 19 times varying c from p+0 next p+1
varying n from p+1 next p+2.
check c ca ':\'.
if c = n.
write: / 'duplicate', c, 'found', 'at position', sy-index.
endif.
enddo.
duplicate : found at position 2
duplicate \ found at position 4
duplicate \ found at position 5
duplicate \ found at position 10
Сравнение операторов exit, continue и check
Оператор |
Эффект |
exit |
Оставляет текущий цикл. |
continue |
Безусловный переход до конца цикла. |
check exp |
Переходы на конца цикла, если exp - ложь. |
Простые форматы оператора write
Оператор write определяет спецификацию позиции вывода и длины. Здесь рассмотрен только простой формат оператора write
Синтаксис простейшего оператора write:
write [/][P][(L)] v1.
где:
v1 – переменная, литерал, или постоянная.
P – число, указывающее позицию на текущей строке вывода.
L – число, указывающее число байтов для вывода переменной v1.
/ начинает новую строку.
/, P, и L используются без пробелов.
Примеры формата оператора write
Правильно |
Неправильно |
write /10(2) 'Hi'. |
write / 10(2) 'Hi'. |
|
write / 10 (2) 'Hi'. |
|
write /10 (2) 'Hi'. |
|
write /10( 2) 'Hi'. |
|
write /10( 2 ) 'Hi'. |
Write (2) 'Hi'. |
write ( 2 ) 'Hi'. |
|
write 'Hi'(2). |
Write 10 'Hi'. |
write 10'Hi'. |
|
write 'Hi' 10. |
*Примеры использования формата оператора write
report ztx1015.
data: f1 type p value 123,
f2 type p value -123.
write: / '....+....1....+....2....+....3....+....4',
/1 'Hi', 4 'There',
/1 'Hi', 3 'There',
/1 'Hi', 2 'There',
/1 'Hi', 1 'There',
/2 'Hi', 'There',
/2(1) 'Hi', 'There',
/2(3) 'Hi', 'There',
/2 'Hi', 10(3) 'There',
/ f1, f2,
/ f1, 4 f2,
/(3) f1,
/(2) f1.
....+....1....+....2....+....3....+....4
Hi There
HiThere
HThere
There
Hi There
H There
Hi There
Hi The
123 123-
123-
123
*3
Резюме
Операторы сравнения: if и case.
Case аналогичен оператору if/elseif, но сравнивает значения на равенство.
Для сравнения строковых данных используются специальные операторы. Системная переменная Sy-fdpos устанавливается после каждого сравнения.
Операторы цикла: do и while.
Системная переменная sy-index всегда содержит счетчик для текущего прохода цикла. После того, как цикл закончен, его значение сбрасывается к значению, которое имела эта системная переменная до начала цикла. Вы можете изменить sy-index, однако его значение будет сброшено при следующем проходе цикла.
Используйте другой сеанс и команду /o, чтобы закончить зацикливание.
Операторы exit, continue и check используются, чтобы изменить обработку цикла.
exit заканчивает обработку цикла и передает управление на первый оператор после цикла.
continue переходит на конец цикла.
check exp переходит на конец цикла, если exp ложно. Когда exp истино, check ничего не делает.
В операторе write позиция и длина могут быть заданы перед значением вывода. Спецификации /, P, и L используются без пробелов.