Snowfun

导航

 

一、用指定偏移量赋值 MOVE

语法:MOVE <F1>[+<o1>][(<l1>)] TO <F2>[+<o2>][(<l2>)].

将字段<F1><o1>+1位置开始且长度为<l1>的段内容赋给字段<F2>,覆盖从<o2>+1位置开始且长度为<l2>的段。

DATA: F1(8VALUE 'ABCDEFGH',
      F2(
8).
DATAO TYPE I VALUE 2,
      L 
TYPE I VALUE 4.
MOVE F1      TO F2.      WRITE   F2.
MOVE F1+O(L) TO F2.      WRITE / F2.
MOVE F1      TO F2+O(L). WRITE / F2.
CLEAR F2.
MOVE F1      TO F2+O(L). WRITE / F2.
MOVE F1+O(L) TO F2+O(L). WRITE / F2.

 

 

二、字符串的算术运算

ADD-CORRESPONDING  SUBTRACT-CORRESPONDING

MULTIPLY-CORRESPONDINGDIVIDE-CORRESPONDING

RATE-USA乘以 MONEY-USA

DATABEGIN OF RATE,
         USA 
TYPE F VALUE '0.6667',
         FRG 
TYPE F VALUE '1.0',
         AUT 
TYPE F VALUE '7.0',
      
END OF RATE.
DATABEGIN OF MONEY,
         USA 
TYPE I VALUE 100,
         FRG 
TYPE I VALUE 200,
         AUT 
TYPE I VALUE 300,
      
END OF MONEY.
MULTIPLY-CORRESPONDING MONEY BY RATE.
WRITE : / MONEY-USA ,  MONEY-FRG ,MONEY-AUT.

输出:67    200    2,100

 

三、添加字段顺序       ADD

1.添加字段顺序并将结果赋给另一个字段

语法: ADD <n1> THEN <n2> UNTIL <nz> GIVING <m>.

如果<n1><n2>...<nz>是在内存中相同类型和长度的等距字段序列,则进行求和计算并将结果赋给<m>

 

2.添加字段顺序并将结果添加到另一个字段的内容中

语法: ADD <n1> THEN <n2> UNTIL <nz> TO <m>.

该语句除了将字段总和添加到<m>的旧内容中之外,与上面语句的工作方式相同。

DATABEGIN OF SERIES,
         N1 
TYPE I VALUE 10,  N2 TYPE I VALUE 20,
         N3 
TYPE I VALUE 30,  N4 TYPE I VALUE 40,
         N5 
TYPE I VALUE 50,  N6 TYPE I VALUE 60,
      
END OF SERIES.
DATA SUM TYPE I.
DATA SUM2 TYPE I.
ADD SERIES-N1 THEN SERIES-N2 UNTIL SERIES-N5 GIVING SUM.
WRITE SUM.  "150    10+20+30+40+50

ADD SERIES-N2 THEN SERIES-N3 UNTIL SERIES-N6 TO SUM2.
WRITE / SUM2. "200  20+30+40+50+60

ADD SERIES-N2 THEN SERIES-N3 UNTIL SERIES-N6 TO SUM.
WRITE / SUM"350  20+30+40+50+60+150N2N6组件求和并将其添加到SUM的值中

 

四、处理日期和时间

DATA: ULTIMO TYPE D .
ULTIMO   = SY-DATUM. 
WRITE : / ULTIMO.     "20120805

ULTIMO+
6(2) = '01'.          " = 本月第一天   20120801
WRITE : / ULTIMO.

ULTIMO      = ULTIMO - 
1.    " = 上月最后一天   20120731
WRITE : / ULTIMO  , SY-DATUM YYMMDD.    "20120731  120805

 

 

五、转换大/小写并替换字符

语法: TRANSLATE <c> TO UPPER CASE. TRANSLATE <c> TO LOWER CASE.

 

使用替换规则时,使用以下语法:TRANSLATE <c> USING <r>.

该语句根据字段<r>中存储的替换规则替换字段<c>的所有字符。<r>包含成对字母,其中每对的第一个字母用第二个字母替换。<r>可为变量。

DATA: T(10VALUE 'AbCdEfGhIj',
      STRING 
LIKE T,
      RULE(
20VALUE 'AxbXCydYEzfZ'.

DATA: T(10VALUE 'AbCdEfGhIj',
      STRING 
LIKE T,
      RULE(
20VALUE 'AxbXCydYEzfZ'.
STRING = T.
WRITE STRING.   "AbCdEfGhIj
TRANSLATE STRING TO UPPER CASE.
WRITE / STRING.     "ABCDEFGHIJ
STRING = T.
TRANSLATE STRING TO LOWER CASE.
WRITE / STRING.     "abcdefghij
STRING = T.
TRANSLATE STRING USING RULE.
WRITE / STRING.     "xXyYzZGhIj 

 

六、覆盖字符字段

语法:OVERLAY <c1> WITH <c2> [ONLY <str>].

该语句用<c2>的内容覆盖字段<c1>中包含<str>中字母的所有位置。<c2>保持不变。如果省略ONLY<str>,则覆盖字段<c1>中所有包含空格的位置。

如果至少要替换<c1>中的一个字符,则将SY-SUBRC设置为0。对于所有其它情况,将SY-SUBRC设置为4。如果<c1><c2>长,则只覆盖<c2>中的长度。

data : old(20TYPE c VALUE 'A B C D E',
      repl(
20TYPE c VALUE '1234567890',
      str(
2VALUE 'ai'.
overlay old with repl.
WRITE old.  “A2B4C6D8E0

 

 

七、获得字符串长度

要决定字符串到最后一个字符而不是SPACE的长度,请使用内部函数STRLEN,用法如下:

语法:[COMPUTE] <n> = STRLEN( <c> ).

STRLEN将操作数<c>作为字符数据类型处理,而不考虑其实际类型。不进行转换。

DATA: INT TYPE I,     
      WORD3(
20VALUE '    9  '
INT = 
STRLEN( WORD3 ). 
WRITE / INT. "数字9位于第五个位置

 

八、连接字符串

语法:CONCATENATE <c1> ... <cn> INTO <c> [SEPARATED BY <s>].

该语句连接字符串<c1><cn>并将结果赋给<c>,忽略尾部空格。

该操作忽略尾部空格。

附加SEPARATED BY <s> 允许指定字符字段<s>,它放置在单个字段间已定义的长度中。

如果结果符合<c>,则将SY-SUBRC设置为0。然而,如果结果必须被截断,则将SY-SUBRC设置为4

data : c1(10VALUE 'Who  ',
      c2(
10VALUE '  are  ',
      c3(
10VALUE  'you  ',
      c4(
30TYPE c,
      spe(
3VALUE '-'.
concatenate c1 c2 c3 into c4.
WRITE c4.

 

posted on 2012-08-03 08:17  Snowfun  阅读(421)  评论(0)    收藏  举报