*&---------------------------------------------------------------------*
*& Report ZTEST_ABAP_2
*&
*&---------------------------------------------------------------------*
*&字符串处理
*&
*&---------------------------------------------------------------------*
REPORT ztest_abap_2.
"定义一个字符串类型的变量
DATA: test1(15) TYPE c VALUE 'HELLO SEVEN'.
WRITE / test1.
"同时定义多个变量
DATA: player(35) TYPE c,
nickname(35),
points TYPE i,
games TYPE i VALUE '10',
averange(5) TYPE p,
acquired TYPE d.
*定义参考变量
DATA: test2 LIKE test1.
test2 = test1.
WRITE / test2.
*变量初始化
test1 = 'SAP'.
CLEAR test1.
WRITE / test1.
*定义常量
CONSTANTS: team1(20) TYPE c VALUE '76ers',
team2 LIKE team1 VALUE 'SAP'.
WRITE: / team1,team2.
*定义结构体以及结构体之间的复制
DATA:BEGIN OF userinf,
sid(10) TYPE c,
name(20) TYPE c,
tel(20) TYPE c,
END OF userinf.
userinf-sid = 'A0001'.
userinf-name = 'SEVEN'.
userinf-tel = '010-123456'.
WRITE / userinf.
DATA:user2 LIKE userinf.
user2 = userinf.
WRITE / user2.
* 结构体的继承
DATA: BEGIN OF employee.
INCLUDE STRUCTURE userinf.
DATA: birthday TYPE d,
add(50) TYPE c,
END OF employee.
*内表的定义与使用
TABLES: usr21. "引用要参考的透明表
*
* 以下是定义不同类型的内表的方法
*
*TYPES: BEGIN OF EMP,
* NAME LIKE USR21-BNAME,
* TELNUM LIKE USR21-PERSNUMBER,
* ADDR LIKE USR21-ADDRNUMBER,
* END OF EMP.
* 参考该结构定义一个初始化大小为10,并且有header line的内表
* DATA: EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER LINE.
* 参考上面的内表,重新定义一个大小为20并没有header line的内表
* DATA: EMPTAB2 LIKE STANDARD TABLE OF EMPTAB INITIAL SIZE 20.
* 另外一种定义内表的方法,带header line
* DATA: EMPTAB3 LIKE EMPTAB OCCURS 10.
* 定义一个排序表,以name为关键字,name不重复
* DATA: EMPTAB4 LIKE SORTED TABLE OF EMPTAB WITH UNIQUE KEY NAME WITH HEADER LINE.
* 定义一个初始化值为0的哈希表
* DATA: EMPTAB5 LIKE HASHED TABLE OF EMPTAB WITH UNIQUE KEY NAME WITH HEADER LINE.
* 内表的赋值
DATA: BEGIN OF emp OCCURS 0,
name LIKE usr21-bname,
telnum LIKE usr21-persnumber,
addr LIKE usr21-addrnumber,
END OF emp.
*DATA: lv_1 TYPE i VALUE 1,
emp-name = 'SEVEN'.
emp-telnum = '010-111111'.
emp-addr = 'DONGGUAN'.
APPEND emp.
WRITE / emp.
*没有header line的内表的数据添加:先在外部封装好
*TABLES: USR21.
*DATA: BEGIN OF EMPTAB,
* NAME LIKE USR21-BNAME,
* TELNUM LIKE USR21-PERSNUMBER,
* ADDR LIKE USR21-ADDRNUMBER,
* END OF EMPTAB.
* DATA: EMP LIKE STANDARD TABLE OF EMPTAB.
* EMP-NAME = 'SEVEN'.
* EMP-TELNUM = '010-111111'.
* EMP-ADDR = 'DONGGUAN'.
* APPEND EMPTAB TO EMP.
* 通过数据库查询添加数据到内表
* TABLES: USR21.
* DATA: BEGIN OF EMP OCCURS 0,
* NAME LIKE USR21-BNAME,
* TELNUM LIKE USR21-PERSNUMBER,
* ADDR LIKE USR21-ADDRNUMBER,
* END OF EMP.
*
* SELECT BNAME AS NAME PERSNUMBER AS NUMBER ADDRNUMBER AS ADDR
* INTO TABLE EMP FROM USR21.
*内表管理:
*内表清空
*REFRESH EMP FROM TABLE usr21."清空emp的存储空间并从usr21中查找数据填充到内表
*向内表插入数据
TYPES: BEGIN OF PERSON,
NAME(30) TYPE C,
END OF PERSON.
DATA: PERSONTAB TYPE STANDARD TABLE OF PERSON WITH HEADER LINE.
*因为是有header line的,所以也同时定义了一个同名对象,所以可以直接执行下面的这两句代码,以及下面的loop代码
PERSONTAB = 'ABC'.
APPEND PERSONTAB.
DATA: PERSON1 LIKE PERSONTAB.
PERSON1 = 'EFG'.
APPEND PERSON1 TO PERSONTAB.
DATA PERSON2 LIKE PERSONTAB.
PERSON2 = 'HHH'.
INSERT PERSON2 INTO TABLE PERSONTAB.
LOOP AT PERSONTAB.
WRITE: / PERSONTAB.
ENDLOOP.
LOOP AT PERSONTAB WHERE NAME = 'HHH'.
WRITE: / PERSONTAB.
ENDLOOP.
DELETE TABLE PERSONTAB WITH TABLE KEY NAME = 'ABC'.
LOOP AT PERSONTAB.
WRITE: / PERSONTAB.
ENDLOOP.
*无header line 内表操作
TYPES: BEGIN OF BOOK,"定义一个类似于类的东西
NAME(30) TYPE C,
PRICE TYPE I,
END OF BOOK.
DATA BOOK1 TYPE BOOK."定义一个类似于对象的东西
DATA: BOOKTAB TYPE STANDARD TABLE OF BOOK."定义一个每一行都是book类型的内表
BOOK1-NAME = 'AAA'.
BOOK1-PRICE = 1.
APPEND BOOK1 TO BOOKTAB.
*无header line的数据输出
*日期格式化
DATA: DATE TYPE D.
DATE = '20180718'.
WRITE / DATE MM/DD/YYYY.
*常用赋值方法与指针赋值
DATA: A TYPE C,
B TYPE C,
CC TYPE I.
A = 'X'.
MOVE A TO B.
WRITE / B.
WRITE 'Y' TO B.
WRITE: / B ,CC.
DATA: NUM TYPE I VALUE 10.
FIELD-SYMBOLS: <F1>,
<F2> TYPE I,
<F3> LIKE NUM.
ASSIGN: NUM TO <F1>,
<F1> TO <F2>.
<F2> = ( ( ( <F2> + 1 ) - 1 ) * 1 / 10 ) DIV 1 MOD 6 ** 1.
WRITE: / <F1> ,<F2>.
data: FIRST TYPE I VALUE 1,
SEC TYPE I VALUE 2.
IF FIRST > SEC.
WRITE: / 'TRUE'.
ELSE.
WRITE: / 'FALSE'.
ENDIF.