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

Завершение Зацикливания

Пример зацикливания.

*Пример зацикливания

report ztx1008.

do.

write sy-index.

if sy-index = 0.

exit.

endif.

enddo.

Если Вы выполните эту программу, то эта программа будет выполняться бесконечно. Окончание задачи SAPGUI или даже перезагрузки не будет прерывать программу, потому что она работает на сервере приложений, а не на Вашем PC. Если Вы перезагрузитесь и затем войдете снова, то Вы не будете в состоянии даже редактировать эту программу. Ваш сеанс входа в систему находится все еще "там" на сервере приложений, и у него все еще будет блокировка на Вашем исходном тексте. Приблизительно после пяти или десяти минут после входа в систему, Вы сможете редактировать Ваш исходный текст еще раз. Однако, программа могла все еще работать в процессе работы, который замедляет систему. В конечном счете, Ваша программа будет потреблять максимальное количество центрального процессора, позволенного в Вашей конфигурации, и процесс работы перезапустит себя.

Чтобы закончить зацикливание, у Вас должно быть по крайней мере два сеанса. Вы должны запустить их прежде, чем выполнить такую программу. Если Вы находитесь в бесконечном цикле и не имеете другого сеанса работы, при повторном входе программ будет продолжать работать.

Использование дополнения varying

Дополнение varying (изменяющееся), используется, чтобы последовательно получать компоненты Field String. next устанавливает расстояние (в байтах) между двумя компонентами в итерации. Компонент получения устанавливает число байтов, которое должно быть прочитано из каждого компонента.

*Пример использования VARYING

report ztx1009.

data: f1,

begin of s,

c1 value 'A',

c2 value 'B',

c3 value 'C',

c4 value 'D',

c5 value 'E',

c6 value 'F',

end of s.

write / ''.

do 6 times varying f1 from s-c1 next s-c2.

write f1.

enddo.

write / ''.

do 3 times varying f1 from s-c1 next s-c3.

write f1.

enddo.

A B C D E F

A C E

*Пример использования VARYING

report ztx1010.

data: f1 type i,

f2 type i,

tot1 type i,

tot2 type i,

begin of s,

c1 type i value 1,

c2 type i value 2,

c3 type i value 3,

c4 type i value 4,

c5 type i value 5,

c6 type i value 6,

end of s.

do 3 times varying f1 from s-c1 next s-c3

varying f2 from s-c2 next s-c4.

write: / f1, f2.

add: f1 TO tot1,

f2 to tot2.

enddo.

write: / '---------- -----------',

/ tot1, tot2.

1 2

3 4

5 6

---------- -----------

9 12

Изменение значений в пределах do ... Varying/enddo

Вы можете изменить значение или f1 или s в пределах цикла... varying/enddo. Когда выполняется оператор enddo, текущее значение f1 копируется назад в компонент, из которого оно взято, в независимости от того, было ли оно изменено или нет.

*Пример

report ztx1011.

data: f1 type i,

begin of s,

c1 type i value 1,

c2 type i value 2,

c3 type i value 3,

c4 type i value 4,

c5 type i value 5,

c6 type i value 6,

end of s.

field-symbols <f>.

write / ''.

do 6 times varying f1 from s-c1 next s-c2.

if sy-index = 6.

s-c6 = 99.

else.

f1 = f1 * 2.

endif.

"assign component sy-index of structure s to <f>. "<f> now points to

write <f>. "a component of s

enddo.

write / ''.

do 6 times varying f1 from s-c1 next s-c2.

write f1.

enddo.

1 2 3 4 5 99

2 4 6 8 10 6

Оператор exit внутри цикла не будет препятствовать тому, чтобы не изменялись значения f1.