一、用指定偏移量赋值 MOVE
语法:MOVE <F1>[+<o1>][(<l1>)] TO <F2>[+<o2>][(<l2>)].
将字段<F1>从<o1>+1位置开始且长度为<l1>的段内容赋给字段<F2>,覆盖从<o2>+1位置开始且长度为<l2>的段。
DATA: F1(8) VALUE 'ABCDEFGH',
F2(8).
DATA: O 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-CORRESPONDING、DIVIDE-CORRESPONDING
用 RATE-USA乘以 MONEY-USA
DATA: BEGIN OF RATE,
USA TYPE F VALUE '0.6667',
FRG TYPE F VALUE '1.0',
AUT TYPE F VALUE '7.0',
END OF RATE.
DATA: BEGIN 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>的旧内容中之外,与上面语句的工作方式相同。
DATA: BEGIN 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+150将N2到N6组件求和并将其添加到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(10) VALUE 'AbCdEfGhIj',
STRING LIKE T,
RULE(20) VALUE 'AxbXCydYEzfZ'.
DATA: T(10) VALUE 'AbCdEfGhIj',
STRING LIKE T,
RULE(20) VALUE '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(20) TYPE c VALUE 'A B C D E',
repl(20) TYPE c VALUE '1234567890',
str(2) VALUE 'ai'.
overlay old with repl.
WRITE old. “A2B4C6D8E0
七、获得字符串长度
要决定字符串到最后一个字符而不是SPACE的长度,请使用内部函数STRLEN,用法如下:
语法:[COMPUTE] <n> = STRLEN( <c> ).
STRLEN将操作数<c>作为字符数据类型处理,而不考虑其实际类型。不进行转换。
DATA: INT TYPE I,
WORD3(20) VALUE ' 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(10) VALUE 'Who ',
c2(10) VALUE ' are ',
c3(10) VALUE 'you ',
c4(30) TYPE c,
spe(3) VALUE '-'.
concatenate c1 c2 c3 into c4.
WRITE c4.
浙公网安备 33010602011771号