Snowfun

导航

 
要比较字符串(类型C)和数字文本(类型N),可以在逻辑表达式中使用下列运算符。
运算符 含义 语法 描述
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(30VALUE 'This is the first text',
      TEXT2(30VALUE 'This is the second text',
      TEXT3(30VALUE 'This is the third text',
      STRING(5VALUE '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(
30TYPE 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

 

 

posted on 2012-08-03 14:34  Snowfun  阅读(940)  评论(0)    收藏  举报