SAP-abap学习记录(2)

这篇博客详细介绍了SAP ABAP中的字符串处理,包括变量定义、初始化、复制和常量设置。此外,还涵盖了结构体的使用,如结构体继承,以及内表的定义、赋值和管理,包括内表的清空、插入、删除等操作。
摘要由CSDN通过智能技术生成

*&---------------------------------------------------------------------*
*& 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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值