abap内表是abap开发中最常用的工具之一

这里总结一个常用的一些操作,以后可以直接复制使用

1,定义

参考字段定义

DATA:BEGIN OF i_list OCCURS 0 ,
  matnr LIKE mara-matnr,
  werks LIKE marc-werks,
END OF i_list .

这种定义方式是带表头的

参考结构体/表/内表定义

DATA:i_list2 LIKE TABLE OF i_list WITH HEADER LINE.

或者

DATA: i_lis2 LIKE i_list OCCURS 0 WITH HEADER LINE.

可以选择带表头或者不带表头由 WITH HEADER LINE. 决定

参考结构体/表/内表+字段定义

DATA: BEGIN OF i_list3 OCCURS 0.
        INCLUDE STRUCTURE i_list.
DATA:   str(10) TYPE c,
END OF i_list3.

定义表头/工作区

DATA:wa_list LIKE i_list.

2,赋值

APPEND   追加

带表头的内表可以直接用内表表头,不带表头的内表需要定义工作区

APPEND i_list.            "带表头内表赋值
APPEND wa_list TO i_list. "不带表头的内表赋值

i_list-matnr = '1001'.
i_list-werks = '1000'.
APPEND i_list.
CLEAR i_list.
wa_list-matnr = '1002'.
wa_list-werks = '1000'.
APPEND wa_list TO i_list.
CLEAR wa_list.

注意:每次APPEND 完之后记得CLEAR 一下表头,防止下次重复用到相同的值

INSERT 插入数据

默认在最内表最后插入一条数数据,效果和APPEND wa_list TO i_list一样
INSERT wa_list INTO TABLE i_list.

在最内表最前面插入一条数据 index指定位置   注意:abap的内表下标从1开始,和其他变成语言的下标从0开始有所不同 插入的下标会占用原来数据的位置,原来位置的数据会往下移一行
INSERT i_list INDEX 1.             "带表头
INSERT wa_list INTO i_list INDEX 1. "不带表头

内表间的赋值

结构相同的内表可以直接赋值

i_list2[] = i_list[].   效果和   MOVE i_list[] TO i_list2[].  相同      会覆盖i_list2原有的值

MOVE 如果不带[] 只作用与表头/工作区

比如:MOVE i_list TO i_list2.  标示表头之间的赋值

APPEND LINES OF i_list TO i_list2.  "追加,不会覆盖i_list2原来的值

APPEND 还可以指定追加第几行

APPEND LINES OF i_list FROM 1 TO 3 TO i_list2. "将内表i_list的前3行数据附加到内表i_list2

不同结果内表间的赋值,可以用循环处理

LOOP AT i_list.
  MOVE-CORRESPONDING i_list TO i_list3. "将字段相同的i_list赋值给i_list3.
  APPEND i_list3.
  CLEAR i_list3.
ENDLOOP.

注意:MOVE-CORRESPONDING 只对工作区用,MOVE-CORRESPONDING i_list[] TO i_list3[]. 语法错误

也可以循环中可以单个字段赋值,不然字段太多就很麻烦了

LOOP AT i_list.
  i_list3-matnr = i_list-matnr.
  i_list3-werks = i_list-werks.
  APPEND i_list3.
  CLEAR i_list3.
ENDLOOP.

这个效果同上是一样的

当然 如果要将不同字段之间赋值就必须使用单个字段赋值了

LOOP AT i_list.
  MOVE-CORRESPONDING i_list TO i_list3. "将字段相同的i_list赋值给i_list3.
  i_list3-str = i_list-matnr. "不同字段间的赋值
  APPEND i_list3.
  CLEAR i_list3.
ENDLOOP.

3.read内表

read的作用是读取内表一行,可以指定key或者index 行号

READ TABLE i_list WITH KEY matnr = '1001' werks = '1000'. "根据key读取
IF sy-subrc = 0.
  WRITE: '读取到数据'.
ENDIF.
READ TABLE i_list INDEX 1. "根据行号读取  读取第一行
IF sy-subrc = 0.
  WRITE: '读取到数据'.
ENDIF.

4.loop循环内表

循环内表非带表头和不带表头的循环,不带标题的循环必须循环到一个工作区做操作

LOOP AT i_list TO wa_list. "不带表头的内表循环
ENDLOOP.
LOOP AT I_LIST. "带表头的内表循环
ENDLOOP.

注意:做loop的时候能做到带条件最好带条件,特别是对大数据量做处理的时候,效率会高很多

LOOP AT i_list WHERE matnr = '1001'. "带条件的循环
ENDLOOP.

5.modify内表

abap修改内表常用的是modify   而modify常常在循环中使用

***将i_list中工厂为1000的数据物料修改为4001
LOOP AT i_list.
  IF i_list-werks = '1000'.
    i_list-matnr = '4001'.
  ENDIF.
  MODIFY i_list.
  CLEAR i_list.
ENDLOOP.

循环中的modify 最好放在每次循环最后,而且一般和 clear一起使用,以防修改到不对应的行

modify 还可以不用循环,可以根据表头修改

wa_list-matnr = '4001'.
wa_list-werks = '1000'.
MODIFY i_list FROM wa_list TRANSPORTING matnr WHERE werks = wa_list-werks.

这个效果和上面的效果是一样的,而且效率要比上面的高

6.delete 内表

根据where条件删除

DELETE i_list WHERE matnr = '4001'.

循环中删除(能用where条件删除的情况下不用循环删除,当然有些情况下必须要在LOOP里面删除的另说)

LOOP AT i_list.
  IF i_list-matnr = '4001'.
    DELETE i_list.
    CONTINUE.
  ENDIF.
ENDLOOP.

注意:循环中删除的时候需要和CONTINUE.一起使用,不然如果循环中还做其他操作可能数据会乱

7.内表排序和删除重复行

内表排序和删除重复行也是开发中用的特别多的一个功能

SORT i_list BY werks matnr. "默认的是升序
SORT i_list BY werks matnr DESCENDING. "werks升序  matnr降序
DELETE ADJACENT DUPLICATES FROM i_list COMPARING wreks matnr. "删除相邻重复行

注意:删除相邻重复行之前,必须先排序

abap内表的操作汇总相关推荐

  1. ABAP几种内表的操作

    ABAP几种内表的操作 这次的程序用到了哈希表,在这里,也顺便总结一下ABAP三种内表的特点. ABAP中有三类内表,标准表,排序表和哈希表. 三种内表介绍 标准表的每一行对应一个逻辑索引-SY-TA ...

  2. ABAP内表在ABAP 740后支持的filter操作

    ABAP内表和Java的Array一样,都是面向过程编程时代的产物.最近Jerry手头的工作,经常需要和Java Array对象化之后的集合类型和Java 8推出的流式API打交道.图一这种filte ...

  3. SAP abap内表分类与增删改查操作

    SAP abap内表分类与增删改查操作 1.内表的分类 1.1.标准表 (standard table ) 系统为该表每一行生成一个院级索引.填表是可以将数据附加在现有行之后,也可以插入到指定的位置, ...

  4. ABAP内表与工作区的区别与作用

    在ABAP中常用的SQL是SAP自带的OPEN SQL,它与NATIVE SQL不同,还要多一层解析的过程.因此,在ABAP中使用多表JOIN(>3)的效率远小于将数据存储到内表后,再对内表进行 ...

  5. 【转】ABAP内表数据和JSON格式互转

    本程序演示ABAP内表数据如何转为JSON格式, 以及JSON数据如何放入内表. REPORT ZTEST005. DATA : JSON_SER TYPE REF TO CL_TREX_JSON_S ...

  6. 上传EXCEL到ABAP内表

    上传EXCEL到ABAP内表 将EXCEL文件上载到内表两种方式: 一.直接将excel数据读入具有相同结构的内表 二.将excel数据读入一个行号,列号,值组成的内表,然后通过指针将数据读到与exc ...

  7. ABAP内表数据和JSON格式互转

    本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...

  8. ABAP~ 内表操作

    内表是每个ABAP开发人员都必须懂的,数据从R3取出来后,就是放在内表里处理的,其实就是Java中的集合框架,只是没有那么多不同数据结构的内表,目前只有标准.排序.Hash三种,这还是新的语法,老的只 ...

  9. 释疑のABAP内表的比较

    我们都知道ABAP可以整体复制内表,如果想将内表的全部内容复制到另一个内表中,可以进行整体赋值操作,使用MOVE或"=". MOVE itab1 TOitab2. Itab1 = ...

最新文章

  1. 学C++走游戏方向,是不是非常艰难自找苦吃?
  2. qt调用linux 进程,Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)
  3. C++ 字符ASC排序
  4. DM8168心得之SD卡快速分区制作
  5. python3.8新特性 逻辑表达式_Python3.8正式发布!新特性解析在这里
  6. 华为云设计语言_《好设计,有方法:我们在搜狐做产品体验设计》 —2.2 设计语言带来的好处...
  7. spring boot与spring mvc的区别是什么?
  8. 通过虚方法实现方法重写-多态
  9. Matlab与高等数学
  10. python入门难?几个练习实例 全会就入门了
  11. 使用C++ 调用 C# 程序
  12. java activity_Activity详解
  13. Kubernetes 使用 Ingress-nginx 实现灰度发布功能
  14. delphi formshow 刷新_OPPO K7x部分配置和外观公布90Hz刷新率11·4发布
  15. Linux的版本可分为,Linux不同分类标准下的各种版本解读
  16. GitHub客户端使用
  17. php 输出git fetch,git fetch
  18. windows云服务器价格_windows云服务器安装(微软云服务器价格)
  19. long型转String(*)
  20. JaCoCo计算代码覆盖率原理

热门文章

  1. Linux Caffe train.txt,python脚本生成caffe train_list.txt的方法
  2. 2.spring IOC(DI)
  3. MFC自绘控件学习总结
  4. C++编程题目:吉祥数 题解+代码
  5. 使用yolov5进行茶叶识别
  6. 智能设备是否就是智能家居?智汀苹果可以联动吗?
  7. js-获取时间戳+四位随机数
  8. Python爬虫小白教程(二)—— 爬取豆瓣评分TOP250电影
  9. 【力扣日记】018 四数之和
  10. 智慧的员工:个人知识管理培训体系