Пример использования SY-FDPOS
Таблица значений переменной SY-FDPOS
Сравнение | if TRUE sy-fdpos = | if FALSE sy-fdpos = |
v1 CO v2 | length (v1) | 1stchar (v1) not in v2 |
v1 CN v2 | 1stchar (v1) in v2 | length (v1) |
v1 CA v2 | 1stchar (v1) in v2 | length (v1) |
v1 NA v2 | length (v1) | 1stchar (v1) in v2 |
v1 CS v2 | 1stchar (v2) in v1 | length (v1) |
v1 NS v2 | length (v1) | 1stchar (v1) in v2 |
v1 CP v2 | 1stchar (v2) in v1 | length (v1) |
Пример аналогичен предыдущему, но добавлены строки, чтобы отобразить значение sy-fdpos после каждого сравнения.
report ztx1004.
* operator: co
write / '''AABB'' co ''AB'''.
if 'AABB' co 'AB'.
write 'True'.
else.
write 'False'.
endif.
write: 'sy-fdpos=', sy-fdpos.
write / '''ABCD'' co ''ABC'''.
if 'ABCD' co 'ABC'.
write 'True'.
else.
write 'False'.
endif.
write: 'sy-fdpos=', sy-fdpos.
* operator: cn
write / '''AABB'' cn ''AB'''.
if 'AABB' cn 'AB'.
write 'True'.
else.
write 'False'.
endif.
write: 'sy-fdpos=', sy-fdpos.
write / '''ABCD'' cn ''ABC'''.
if 'ABCD' cn 'ABC'.
write 'True'.
else.
write 'False'.
endif.
write: 'sy-fdpos=', sy-fdpos.
* operator: ca
write / '''AXCZ'' ca ''AB'''.
if 'AXCZ' ca 'AB'.
write 'True'.
else.
write 'False'.
endif.
write: 'sy-fdpos=', sy-fdpos.
write / '''ABCD'' ca ''XYZ'''.
if 'ABCD' ca 'XYZ'.
write 'True'.
else.
write 'False'.
endif.
write: 'sy-fdpos=', sy-fdpos.
* operator: na
write / '''AXCZ'' na ''ABC'''.
if 'AXCZ' na 'ABC'.
write 'True'.
else.
write 'False'.
endif.
write: 'sy-fdpos=', sy-fdpos.
|
|
write / '''ABCD'' na ''XYZ'''.
if 'ABCD' na 'XYZ'.
write 'True'.
else.
write 'False'.
endif.
write: 'sy-fdpos=', sy-fdpos.
'AABB' co 'AB' True sy-fdpos = 4
'ABCD' co 'ABC' False sy-fdpos = 3
'AABB' cn 'AB' False sy-fdpos = 4
'ABCD' cn 'ABC' True sy-fdpos = 3
'AXCZ' ca 'AB' True sy-fdpos = 0
'ABCD' ca 'XYZ' False sy-fdpos = 4
'AXCZ' na 'ABC' False sy-fdpos = 0
'ABCD' na 'XYZ' True sy-fdpos = 4
· Результат сравнения истина. Поэтому, sy-fdpos содержит 4, длина первого операнда.
· Результат сравнения, ложь, потому что v1 содержит значения не содержащиеся в v2. Sy-fdpos содержит 3, отсчитываемое от нуля смещение первого символа в v1, который не находится в v2.
· Хотя следующие две строки являются логическими противоположностями предыдущих строк, значения sy-fdpos не изменяются.
· Результат сравнения истина, потому что v1 содержит символ из v2. Sy-fdpos содержит 0: отсчитываемое от нуля смещение первого символа в v1, который находится в v2.
· v1 не содержит ни одного из символов в v2, поэтому sy-fdpos содержит 4: длина v1.
· Следующая строка является логическим отрицанием ca. 'AXCZ' действительно содержит значение из 'ABC' и так ca, тест был бы истиной. Отрицание этого результата дает ложь. Sy-fdpos установлен в отсчитываемое от нуля смещение первого символа в 'AXCZ', который находится также в 'ABC'.
· Следующая строка является, снова, логическим отрицанием ca. 'ABCD' не содержит значение от 'XYZ' и так ca тест был ложью. Отрицание этого результата приводит к истине. Sy-fdpos установлен в длину 'ABCD'.
Синтаксис оператора 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 можно определить только единственное значение, которое будет сравниваться на равенство.