abap内表的操作汇总
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内表的操作汇总相关推荐
- ABAP几种内表的操作
ABAP几种内表的操作 这次的程序用到了哈希表,在这里,也顺便总结一下ABAP三种内表的特点. ABAP中有三类内表,标准表,排序表和哈希表. 三种内表介绍 标准表的每一行对应一个逻辑索引-SY-TA ...
- ABAP内表在ABAP 740后支持的filter操作
ABAP内表和Java的Array一样,都是面向过程编程时代的产物.最近Jerry手头的工作,经常需要和Java Array对象化之后的集合类型和Java 8推出的流式API打交道.图一这种filte ...
- SAP abap内表分类与增删改查操作
SAP abap内表分类与增删改查操作 1.内表的分类 1.1.标准表 (standard table ) 系统为该表每一行生成一个院级索引.填表是可以将数据附加在现有行之后,也可以插入到指定的位置, ...
- ABAP内表与工作区的区别与作用
在ABAP中常用的SQL是SAP自带的OPEN SQL,它与NATIVE SQL不同,还要多一层解析的过程.因此,在ABAP中使用多表JOIN(>3)的效率远小于将数据存储到内表后,再对内表进行 ...
- 【转】ABAP内表数据和JSON格式互转
本程序演示ABAP内表数据如何转为JSON格式, 以及JSON数据如何放入内表. REPORT ZTEST005. DATA : JSON_SER TYPE REF TO CL_TREX_JSON_S ...
- 上传EXCEL到ABAP内表
上传EXCEL到ABAP内表 将EXCEL文件上载到内表两种方式: 一.直接将excel数据读入具有相同结构的内表 二.将excel数据读入一个行号,列号,值组成的内表,然后通过指针将数据读到与exc ...
- ABAP内表数据和JSON格式互转
本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...
- ABAP~ 内表操作
内表是每个ABAP开发人员都必须懂的,数据从R3取出来后,就是放在内表里处理的,其实就是Java中的集合框架,只是没有那么多不同数据结构的内表,目前只有标准.排序.Hash三种,这还是新的语法,老的只 ...
- 释疑のABAP内表的比较
我们都知道ABAP可以整体复制内表,如果想将内表的全部内容复制到另一个内表中,可以进行整体赋值操作,使用MOVE或"=". MOVE itab1 TOitab2. Itab1 = ...
最新文章
- 学C++走游戏方向,是不是非常艰难自找苦吃?
- qt调用linux 进程,Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)
- C++ 字符ASC排序
- DM8168心得之SD卡快速分区制作
- python3.8新特性 逻辑表达式_Python3.8正式发布!新特性解析在这里
- 华为云设计语言_《好设计,有方法:我们在搜狐做产品体验设计》 —2.2 设计语言带来的好处...
- spring boot与spring mvc的区别是什么?
- 通过虚方法实现方法重写-多态
- Matlab与高等数学
- python入门难?几个练习实例 全会就入门了
- 使用C++ 调用 C# 程序
- java activity_Activity详解
- Kubernetes 使用 Ingress-nginx 实现灰度发布功能
- delphi formshow 刷新_OPPO K7x部分配置和外观公布90Hz刷新率11·4发布
- Linux的版本可分为,Linux不同分类标准下的各种版本解读
- GitHub客户端使用
- php 输出git fetch,git fetch
- windows云服务器价格_windows云服务器安装(微软云服务器价格)
- long型转String(*)
- JaCoCo计算代码覆盖率原理