| 运算符 | 含义 | 语法 | 描述 |
| CO | 仅包含 | <F1> CO <F2> | <F1>仅包含<F2>中的字符。 该比较区分大小写,并包括尾部空格。 |
| CN | 不仅包含 | <F1> CN <F2> | <F1>还包含<F2>之外的其他字符。 该比较区分大小写,并包括尾部空格。 |
| CA | 包含任何 | <F1> CA <F2> | <F1>至少包含<F2>的一个字符。 该比较区分大小写。 |
| NA | 不包含任何 | <F1> NA <F2> | 如果<F1>不包含<F2>的任何字符。 该比较区分大小写。 |
| CS | 包含字符串 | <F1> CS <F2> | <F1>包含字符串<F2>。 忽略尾部空格并且比较不区分大小写。 |
| NS | 不包含字符串 | <F1> NS <F2> | <F1>不包含字符串<F2>。 忽略尾部空格且比较不区分大小写 |
| CP | 包含模式 | <F1> CP <F2> | <F1>包含模式<F2>。 忽略尾部空格且比较不区分大小写。 |
| NP | 不包含模式 | <F1> NP <F2> | <F1>不包含模式<F2>。 忽略尾部空格且比较不区分大小写 |
DATA: TEXT1(30) VALUE 'This is the first text',
TEXT2(30) VALUE 'This is the second text',
TEXT3(30) VALUE 'This is the third text',
STRING(5) VALUE 'eco'.
IF TEXT1 CS STRING.
WRITE / 'Condition 1 is fulfilled'.
ELSEIF TEXT2 CS STRING.
WRITE / 'Condition 2 is fulfilled'. "输出这句,因为字符串“eco” 存在于 TEXT2 中。
ELSEIF TEXT3 CS STRING.
WRITE / 'Condition 3 is fulfilled'.
ELSE.
WRITE / 'No condition is fulfilled'.
ENDIF.
CASE 条件分支
CASE <f>.
WHEN <F1>.
<statement block>
WHEN <F2>.
<statement block>
WHEN <F3>.
<statement block>
WHEN ...
......
WHEN OTHERS.
<statement block>
ENDCASE.
例子:
DATA: TEXT1 VALUE 'X',
TEXT2 VALUE 'Y',
STRING VALUE 'A'.
CASE STRING.
WHEN TEXT1.
WRITE: / 'String is', TEXT1.
WHEN TEXT2.
WRITE: / 'String is', TEXT2.
WHEN OTHERS.
WRITE: / 'String is not', TEXT1, TEXT2, TEXT3.
ENDCASE.
实例:CASE语句
DATA: text1 TYPE c VALUE 'X',
text2 TYPE c VALUE 'Y',
text3 TYPE c VALUE 'Z',
stringa TYPE c VALUE 'X'.
CASE stringa.
WHEN text1 OR text2.
WRITE: / 'Stringa is', text1, 'OR', text2.
WHEN text3.
WRITE: / 'Stringa is', text3.
WHEN OTHERS.
WRITE: / 'Stringa is not', text1, text2, text3.
ENDCASE.
输出:Stringa is X OR Y.
DO的无条件循环
可以使用TIMES选项限制循环次数。<n>可以是文字或变量。如果<n>是0或负数,系统不执行该循环。
系统字段SY-INDEX中包含已处理过的循环次数。
语法:
DO [<n>TIMES] [VARYING <f> FROM <F1> NEXT <F2>].
<statement block>
ENDDO.
注意:
使用 DO 语句时要避免死循环。 如果不使用 TIMES 选项,则在语句块中至少应包含一个 EXIT、 STOP 或 REJECT 语句,以便系统能够退出循环。
DO.
WRITE SY-INDEX.
IF SY-INDEX = 3.
EXIT.
ENDIF.
ENDDO.
输出 1 2 3
DO 2 TIMES.
WRITE SY-INDEX.
SKIP.
DO 3 TIMES.
WRITE SY-INDEX.
ENDDO.
SKIP.
ENDDO.
输出:
1
1 2 3
2
1 2 3
实例:DO
* simple do
DO.
WRITE sy-index.
IF sy-index = 3.
EXIT.
ENDIF.
ENDDO.
SKIP.
ULINE.
* do n times
DO 2 TIMES.
WRITE sy-index.
SKIP.
DO 3 TIMES.
WRITE sy-index.
ENDDO.
SKIP.
ENDDO.
WHILE 的条件循环
WHILE <condition> [VARY <f> FROM <F1> NEXT <F2>].
<statement block>
ENDWHILE.
WHILE语句的VARY选项与DO循环的VARYING选项工作方式一样(参见使用DO的无条件循环(页71))。允许每次执行循环时为变量<f>重新赋值。<F1>、<F2>、<F3>、...必需是内存中类型相同和长度相等的一系列等距字段。第一次循环时,将<F1>分配给<f>,第二次循环时,将<F2>分配给<f>,以此类推。可以在一个WHILE语句中使用多个VARY选项。
DATA: length TYPE i VALUE 0,
strl TYPE i VALUE 0,
string(30) TYPE c VALUE 'Test String'.
strl = strlen( string ).
WHILE string NE space.
WRITE string(1).
length = sy-index.
SHIFT string.
ENDWHILE.
WRITE: / 'STRLEN: ', strl.
输出:T e s t S t r I n g
STRLEN: 11
浙公网安备 33010602011771号