Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 10 День 10 Управляющие операторы 2011.doc
Скачиваний:
7
Добавлен:
20.11.2019
Размер:
316.42 Кб
Скачать

Оператор выбора 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, и цикл продолжит обрабатываться, как будто Вы не изменяли его вообще.