我们一起学ABAP(04)~数据赋值和字符串总结

来源:互联网 发布:用户画像静态数据 编辑:程序博客网 时间:2024/06/06 02:29

转载地址:http://blog.csdn.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




阅读全文
0 0