我们一起学ABAP(04)~数据赋值和字符串总结
转载地址:http://blog.****.net/qq_37625033/article/details/67631908
1、这章我主要总结一下,ABAP中数据之间的处理方法。
1.1、数据间的赋值
a、MOVE 语句
move 语句的赋值的三种语法:
MOVE <f1> TO <f2> 等同: <f2> = <f1>.
MOVE <f1> [+<o1>][(<l1>)] TO <f2> [+<o2>] [(<l2>)].
MOVE-CORRESPONDING <string1> TO <string2>.
b、WRITE TO 语句
write to 语句的三种语法:
WRITE <f1> TO <f2> [<option>].
WRITE(<f>) TO <g>.
WRITE<f1> [+<o1>][(<l1>)] TO <f2>[+<o2>][(<l2>)].
1.2、将数据重置为默认值
语法:
CLEAR <f>
栗子:
DATA number TYPE I VALUE '10'.
WRITE number.
CLEAR number.
WRITE / number.
输出结果: 10
0
2、ABAP中基本的算术运算
2.1、ABAP中使用的一些数学函数
3、日期和时间
日期:
DATA: ultimo TYPE D.
ultimo = SY-DATUM. "输出:20170328
ultimo + 6(2) = '01'. "输出:20170301
ultimo = ultimo - 1. "输出:70170228
时间:
DATA: diff TYPE I,
seconds TYPE I,
hours TYPE I.
DATA: T1 TYPE T VALUE '200000'.
T2 TYPE T VALUE '020000'.
diff = T2 - T1.
SECONDS = diff MOD 86400.
HOURS = SECONDS / 3600.
4、字符串
4.1、移动字符串的内容
a、按给定的位置数值移动字符串
语法:(mode的值可以是:LEFT 向左移动<n>个位置,右边用<n>个空格填充;
RIGHT 向右移动<n>个位置,左边用<n>个空格填充;
CIRCULAR 向左移动<n>个位置,以便左边<n>个字符出现在右边。)
SHIFT <c> [BY <n> PLACES] [<mode>].
注意:该语句会将字段<c>移动<n>个位置,如果省略BY <n> PLACES,则将<n>解释为一个位置;如果<n>是0或负数,则<c>保持不变;如果<n>超过<c>长度,则<c>用空格填充。<n>可为变量。
b、移动字段串给指定字符串
语法:
SHIFT <c> UP TO <str> <mode>.
栗子:(ppx就是皮皮虾)
DATA: ppx(10) VALUE 'woipipixia',
ppl LIKE ppx,
ppg(2) VALUE 'wa'.
ppl = ppx.
WRITE ppl.
SHIFT ppl UP TO ppg.
WRITE / ppl.
SHIFT ppl UP TO ppg LEFT.
WRITE / ppl.
ppl = ppx.
SHIFT ppl UP TO ppg RIGHT.
WRITE / ppl.
ppl = ppx.
SHIFT ppl UP TO ppg CIRCULAR.
WRITE / ppl.
C、根据第一个或者最后一个移动字符串
语法:
SHIFT <c> LEFT DELETING LEADING <str>.
SHIFT <c> RIGHT DELETING TRAILING <str>.
5、替换字符串
语法:
REPLACE <str1>WITH <str2>INTO <C>
[LENGHT <len>].
注意了: str1、str2和len的值可以是变量。
6、给字符串转换大小写
语法:
TRANSLATE <c> TOUPPER CASE. "小写转大写
TRANSLATE <c> TOLOWER CASE. "大写转小写
TRANSLATE <c> TOUSING<c1>. "参照另一个字符串转换
TRANSLATE <c> FROM CODEPAGE <g1>...
TOCODE PAGE <g2>. " 实现不同系统之间的代码转换
举个栗子:
HP-UX系统与 IBM EBCDIC系统之间的代码转换。
TRANSLATE c FROM CODE PAGE '1110' TO CODE PAGE '0100'.
7、连接字符串
语法:
CONCATENATE <c1> ...<cn>INTO <c> [SEPARATED BY <s>].
8、拆分字符串
语法:
SPLIT <c> AT <del>INTO <c1>
... <cn>.
9、获得字符串的长度
语法:
[COMPUTE] <n> =STRLEN(<c>)
栗子: str TYPE I,
word(20) VALUE '12345'.
word1(20).
word2(20) VSLUE ' 4 '.
str = STRLEN(word).
WRITE str.
str = STRLEN(word1).
WRITE / str.
str = STRLEN(word2).
WRITE / str.
10、设置字符串偏移
语法:
<f>[+<o>] [(<l>)]
DATA TIME TYPE T VALUE '131421'.
WRITE TIME.
WRITE TIME + 2(2).
CLEAR TIME + 2(4).
WRITE / TIME.
输出结果为:
131421
14
130000
11、重新整合分配字符串
语法:
CONDENSE<c> [NO-GAPS].
栗子:
DATA name(30).
name(10) = ' Dr.'.
name + 10(10) = 'Michael'.
name + 20(10) = 'Hofmann'.
CONDENSE name.
WRITE name. "输出: 'Dr.Michael Hofmann'
注意:如果在函数后面加上"NO-GAPS",那么结果就变为
"Dr.MichaelHofmann"
12、参考字符串对空白字符进行补充
语法:
OVERLAY <c1>WITH <c2>.
用法:该函数对原有字符串和参考字符串按字符进行逐一比较,若原字符串某个位置字符为空,而参考字符串有值存在,怎用参考字符串的值取代。
13、字符串按条件取代
语法:
REPLACE <f>...WITH <g>...INTO <h>.
栗子:
DATA str(10) VALUE '12345abcde'.
REPLACE '12345' WITH '56789' INTO field.
输出结果: str = '6789abcde'.
14、搜索指定字符串
a、语法:
SEARCH <f>FOR <g>. "g表示被搜索的字符串
常用来组合的函数:
...ABBREVIATED:从指定字符串中按顺序搜索相匹配的字符串。
...STARTING AT n1:从字符串第n1个字符开始搜索。
...ENDING AT n2: 搜索到n2个字符为止。
...AND MARK:从指定字符串中模糊搜索相匹配的字符串。
b、语法:
SEARCH <itab> FOR <g>: "g表示被搜索的字符串
常用来组合的函数:
...ABBREVIATED:从内表中按顺序搜索相匹配的字符串。
...STARTING AT line1: 从内表中具体某行开始搜索相匹配字符串。
...ENDING AT line2: 搜索的最大范围到内表的具体某行为止。
...AND MARK: 从内表中模糊搜索相匹配的字符串。
注意:通过系统变量
SY-SUBRC 可以回执字符串查找的结果,若回执等于 0,表示查找成功。某段字符串的具体位置保存在系统变量 SY-FDPOS 中。
巨栗:
DATA STR(50).
MOVE 'Welcome to SAP world !' TO STR.
SEARCH STR FOR 'Wrd' ABBREVIATED. "因为按顺序查找'Wrd'在子字符串'world'中,所以执行结果为:SY-SUBRC = 0, SY-FDPOS = 15.
SEARCH STR FOR 'SAP' STARTING AT 10. "从第10行开始查找,SY-SUBRC = 0, SY-FDPOS = 2.
SEARCH STR FOR 'SAP' ENDING AT 10. "查找到第10行结束,字符不存在,SY-SUBRC = 4,SY-FDPOS = 0
SEARCH STR FOR '*AP' AND MARK. "模糊查询包含'*AP'的子字符串,符合条件,SY-SUBRC
= 0,SY-FDPOS = 11
SEARCH STR FOR '*A' AND MARK. "匹配字符串必须是子字符串以空格分开的最后几位,SY-SUBRC = 4
14.1、查询特殊字符的细节
注意:对于一些特殊符号,如"*"、"@"、"."、"^"等,需要在其两边加上顿号(
' )作为修饰。
栗子:
DATA STR(50).
MOVE 'AAAA*BBBB' TO STR.
SEARCH STR FOR '.*.' ABBREVIATED. "从内表的第二行可以找到,所以 SY-SUBRC
= 0,SY-FDPOS = 5
14.2 再来看看从内表中查找字符串的其他语法
DATA: BEGIN OF T_INF OCCRS 0,
LINE(80),
END OF T_INF.
APPEND 'Hello SAP' TO T_INF.
APPEND 'I am come from China' TO T_INF. "定义内表后增加两行数据。
SEARCH T_INF FOR 'SAP' ABBREVIATED. " 从内表第一行中可以找到,所以 SY-SUBRC = 0,SY-FDPOS = 6
SEARCH T_INF FOR 'am' ABBREVIATED. "从内表中的第二行可以找到,SY-SUBRC
= 0,SY-FDPOS = 2