SAP ABAP 基础语法(声明语句、算术/比较/字符串运算符、引用类型、常用函数、条件循环语句、字符串操作语句)
1.声明语句:
|
说明 |
示例 |
TYPES |
定义数据结构类型 |
TYPES:BEGIN OF TY_STU1, ID TYPE N, NAME TYPE STRING, AGE TYEP I, END OF TY_STU1. |
DATA |
定义数据结构对象 |
DATA: GT_STU TYPE STANDARD OF TY_STU. |
CONSTANTS |
声明常量 |
CONSTANTS: BEGIN OF CT_STU2, NAME TYPE STRING VALUE ‘XIAOLI’, AGE TYEP I VALUE 12, END OF TY_STU2. |
TABLES |
声明表工作区 |
TABLES:STU. |
TYPE |
其后跟某种类型 |
DATA:BEGIN OF GS_STU3, ID TYPE N VALUE 00000001, NAME TYPE STRING VALUE ‘LILI’, END OF GS_STU3. |
LIKE |
其后可以跟实例对象 |
DATA:BEGIN OF GS_STU2, MSG LIKE GS_STU1 AGE TYPE I VALUE 12, END OF GS_STU2. |
(1) TYPES和DATA的区别
TYPES是用来自定义某种类型的,需要用DATA实例化后才可以使用,而DATA是用来声明实例变量的。
(2) TYPE和LIKE的区别
TYPE后面只能跟某种类型,LIKE后面跟实例对象;②参照结构体对象生成内表时,只能用LIKE,不能用TYPE;参照结构类型生成内表时,可以用LIKE(直接拥有参照结构类型的元素结构),也可以用TYPE(间接拥有被参照结构类型的元素结构);
2.运算符
算术运算符 |
说明 |
+ |
加 |
- |
减 |
* |
乘 |
/ |
除 |
DIV |
整除 |
MOD |
取模 |
** |
乘方 |
= |
赋值 |
MOVE-CORRESPONDING |
将一个结构中得数据赋值给另一个结构中得对应字段,只能存一行数据(注意:当遇到两个源结构字段不同,目标结构的字段同时包含源结构字段时,会出现部分源结构中的字段没有因为赋新值而清空的情况,需要用到CLEAR清空) |
比较运算符 |
说明 |
EQ(=) |
等于 |
NE(<>) |
不等于 |
GT(>) |
大于 |
LT(<) |
小于 |
GE(>=) |
大于等于 |
LE(<=) |
小于等于 |
A BETWEEN B AND C |
A是否在B和C之间 |
IS INITIAL |
是初始值 |
IS NOT INITIAL |
不是初始值 |
IS BOIND |
引用变量是否指向一个有效的引用 |
IS ASSIGNED |
FIELD SYMBOL是否分配有内存区域 |
IS SUPPLIED |
参数是否被实参赋值 |
字符串运算符 |
说明 |
CO |
仅包含 |
CN |
不仅包含 |
CA |
包含任何 |
NA |
不包含任何 |
CS |
包含字符串 |
NS |
不包含字符串 |
CP |
包含模式 |
NP |
不包含模式 |
3.引用类型
引用类型 |
语法 |
说明 |
FIELD-SYMBOLS |
①确定结构的FS:FIELD-SYMBOLS <FS> TYPE I. ②不确定结构的FS:FIELD-SYMBOLS <FS> TYPE ANY. |
FIELD-SYMBOLS相当于C语言的指针,定义并分配某个变量、结构或者内表给它,才能使用;如果使用前未分配,则会发生未分配错误。 |
ASSIGN |
ASSIGN (ID) TO <FS>. |
动态分配时,会修改SY-SUBRC,成功值为0;当分配不成功时,保持上一次的状态。 |
ASSIGN ID TO <FS>. |
静态分配时,不会修改SY-SUBRC,使用<FS> IS [NOT] ASSIGNED判断,当分配不成功时,是未分配状态。 |
|
UNASSIGN |
UNASSIGN <FS>. |
解除分配(初始化FS) |
COMPONENT … OF STRUCTURE |
ASSIGN COMPONENT COMP-ID OF STRUCTURE <FS1> TO <FS2> |
动态访问结构成员 |
TYPE REF TO |
|
定义一个数据对象,用来指向另外的数据 |
CREATE DATA |
|
动态避开内存 |
GET REFERENCE |
|
指向已经存在的内存变量 |
4.常用函数
函数名 |
说明 |
ABS(N) |
绝对值 |
SIGN(N) |
符号值,整数返回1,0返回0,负数返回-1 |
CEIL(N) |
向下取整 |
FLOOR(N) |
向上取整 |
TRUNC(N) |
取整数部分 |
FRAC(N) |
取小数部分 |
STRLEN(N) |
取长度 |
LINES(ARG) |
取行数 |
5.条件/循环语句
条件/循环语句 |
语法 |
IF |
IF <condition1>. …… ELSEIF <condition2>. …… ELSE. …… ENDIF. |
CASE |
CASE <X>. WHEN <X1>. …… WHEN <X2>. …… WHEN OTHERS. …… ENDCASE. |
DO |
DO [<N> TIMES]. …… ENDDO. |
WHILE |
WHILE <condition>. …… ENDWHILE. |
LOOP(通常用于内表) |
LOOP AT ITAB. …… ENDLOOP. |
循环中可能用到的关键词:
关键词 |
说明 |
CONTINUE |
无条件终止当前循环,执行下一次循环 |
CHECX |
有条件终止当前循环 |
EXIT |
终止所有循环 |
WAIT UP TO <N> SECONDS |
添加等待时间 |
6.字符串操作语句
关键词 |
说明 |
示例 |
CONCATENATE |
拼接 |
CONCATENATE ‘AAA’ ‘BBB’ TO TEXT. (TEXT是变量) |
REPLACE |
替换字符串内容 |
REPLACE ‘ABC’ WITH ‘MMF’ INTO ‘ABCDE’. |
SHIFT |
①移动字符串内容;②移动字符串给到定字符串。LEFT:向左移动<N>个位置(默认),RIGHT:向右移动<N>个位置,CIRCULAR:向左移动<N>个位置,右边出现<N>个字符。 |
SHIFT ‘ABDCE’ BY 2 PLACES LEFT. SHIFT ‘ABCDE’ UP TO ‘C’ LEFT. |
SHIFT ‘ABDCE’ BY 2 PLACES RIGHT. SHIFT ‘ABCDE’ UP TO ‘C’ RIGHT. |
||
SHIFT ‘ABDCE’ BY 2 PLACES CIRCULAR. SHIFT ‘ABCDE’ UP TO ‘C’ CIRCULAR. |
||
SPLIT |
拆分字符串 |
SPLIT ‘AA/BB’ AT ‘/’ INTO TEXT1 TEXT2. (TEXT1,TEXT2是变量) |
CONDENSE C [NO-GAPS] |
删除字符串中的空格 NO-GAPS删除前后空格 |
CONDENSE ‘AA BB CC’. |
TRANSLATE |
转换大/小写字符 |
大写:TRANSLATE ‘aBcDeF’ TO UPPER CASE. 小写:TRANSLATE ‘aBcDeF’ TO LOWER CASE. |
SEARCH |
搜索字符串 |
SEARCH ‘ABCDEFG’ FOR ‘C’. |
OVERLAY |
覆盖字符串 |
OVERLAY ‘a c e’ WITH ‘ABCDE’. |
WRITE TO |
把源的格式赋值到目标 |
WRITE SY-DATUM TO CHAR. (CHAR是变量) |
MOVE TO |
把源的值赋值到目标 |
MOVE SY-DATUM TO CHAR.(CHAR是变量) |