Дополнение index
Чтение единственной строки используя оператора read table
Использование exit, continue, stop, и check
Таблица показывает работу операторов exit, continue, и check внутри цикла loop at/endloop.
Оператор | Действие оператора |
exit | Немедленно заканчивает цикл и осуществляется переход на оператор после endloop. |
Continue | Осуществляет переход на следующую итерацию цикла, минуя все операторы, стоящие после Continue. |
Check exp | Если exp – истина, обработка продолжается, как будто этот оператор не был выполнен. Если exp – ложь, осуществляется переход на следующую итерацию цикла как и в операторе continue. |
Чтобы определить положение и прочитать единственную строку от внутренней таблицы, используется ооператор read table. Он читает единственную строку, которая соответствует определенным критериям и помещает её в рабочую область.
read table it [into wa ] [index i | with key keyexp [binary search] ] [comparing cmpexp ] [transporting texp ].
· it – название внутренней таблицы.
· wa – название рабочей области.
· i – целочисленное значение номера строки в таблице. Например, 1 – первая строка в таблице, 2 – вторая, и так далее.
· keyexp – выражение, определяющее значение, которое будет найдено.
· cmpexp – выражение сравнения, определяющее тест, который будет выполнен на найденной строке.
· texp – выражение, представляющее поля, которые будут перемещаться в рабочую область после того, как строка была найдена.
· Если и comparing и transporting определены, comparing должно быть на первом месте.
Особенности оператора:
· у wa должна быть та же самая структура как строка тела.
· wa может быть строкой заголовка, или Field String, имеющей ту же самую структуру как строка в теле.
· Если Вы не определяете рабочую область, по умолчанию система использует строку заголовка. Например, read table it into it читает одну строке из внутренней таблицы it и помещает её в заголовок it. Эквивалентный оператор – read table it.
Внутренний индекс строки таблицы – номер строки. Например, первая строка в таблице – индекс 1, вторая – индекс 2, и так далее. В операторе read table, если index i определен, система восстанавливает i строку из внутренней таблицы и помещает её в рабочую область. Например, read table it index 7 читает седьмую строку из внутренней таблицы и помещает её в строку заголовка.
Если чтение было успешно (то есть, если i строка существует), sy-subrc установлен на нуль, и sy-tabix установлен в i.
report ztx1106.
data: begin of it occurs 3,
f1(2) type n,
f2 type i,
f3(2) type c,
f4 type p,
end of it,
wa like it.
it-f1 = '10'. it-f3 = 'AA'. it-f2 = it-f4 = 1. append it.
it-f1 = '20'. it-f3 = 'BB'. it-f2 = it-f4 = 2. append it.
it-f1 = '30'. it-f3 = 'CC'. it-f2 = it-f4 = 3. append it.
read table it index 2.
write: / 'sy-subrc =', sy-subrc,
/ 'sy-tabix =', sy-tabix,
/ it-f1, it-f2, it-f3, it-f4.
read table it into wa index 1.
write: /,
/ 'sy-subrc =', sy-subrc,
/ 'sy-tabix =', sy-tabix,
/ it-f1, it-f2, it-f3, it-f4,
/ wa-f1, wa-f2, wa-f3, wa-f4.
read table it index 4.
write: /,
/ 'sy-subrc =', sy-subrc,
/ 'sy-tabix =', sy-tabix,
/ it-f1, it-f2, it-f3, it-f4,
/ wa-f1, wa-f2, wa-f3, wa-f4.
sy-subrc = 0
sy-tabix = 2
20 2 BB 2
sy-subrc = 0
sy-tabix = 1
20 2 BB 2
10 1 AA 1
sy-subrc = 4
sy-tabix = 0
20 2 BB 2
10 1 AA 1