一、基本介绍
一般两个内表的赋值
1.如果是结构完全一样使用: A = B[] .
2.若是结构有些一样有些不同那就是使用 MOVE-CORRESPONDING,但是它只能把相同的字段的名的值赋值进去,不同字段名的就无法赋值过去了。
3.loop 循环进行赋值,赋值字段名相同或者不同的都可以办得到,但是资源耗费大。
4.使用方法cl_abap_corresponding=>create ,可以不使用循环,把字段名不同的字段匹配赋值。
5.使用MAPPING的方法—代码特别简单易懂。
二、实例
TYPES:BEGIN OF ty_a,
a TYPE char20, "姓名
b TYPE i, "年龄
c TYPE string, "籍贯
END OF ty_a.
TYPES:BEGIN OF ty_e,
e TYPE char2,
f TYPE i,
c TYPE string,
END OF ty_e.
DATA:gt_a TYPE TABLE OF ty_a.
DATA:gt_e TYPE TABLE OF ty_e.
gt_a = VALUE #(
( a = '张三' b = 25 c = '湖南人' )
( a = '李四啊' b = 34 c = '广东人' ) ).
DATA(lo_mapping_excutor) = cl_abap_corresponding=>create(
source = gt_a
destination = gt_e
mapping = VALUE cl_abap_corresponding=>mapping_table(
( level = 0 kind = 1 srcname = 'A' dstname = 'E ' )
( level = 0 kind = 1 srcname = 'B' dstname = 'F ' ) ) ).
lo_mapping_excutor->execute( EXPORTING source = gt_a
CHANGING destination = gt_e ).
cl_demo_output=>display( gt_e ).
运行结果:
三、注意点
1.字段强制转换,C类型不能强制转换为 i类型,i类型可以转成C类型。
2.字段长度,定义的短了,会强制截断。
3.字段名相同的,会自动匹配赋值。
四、MAPPING实例代码
TYPES:BEGIN OF ty_a,
a TYPE char20, "姓名
b TYPE i, "年龄
c TYPE string, "籍贯
END OF ty_a.
TYPES:BEGIN OF ty_e,
e TYPE char2,
f TYPE i,
c TYPE string,
END OF ty_e.
DATA:gt_a TYPE TABLE OF ty_a.
DATA:gt_e TYPE TABLE OF ty_e.
gt_a = VALUE #(
( a = '张三' b = 25 c = '湖南人' )
( a = '李四啊' b = 34 c = '广东人' ) ).
gt_e = CORRESPONDING #(
gt_a MAPPING e = a
f = b ) .
cl_demo_output=>display( gt_e ).
运行结果:与上面的一致。
五、参考链接
1.汪子熙微信分享
2.感谢康师傅的提醒,让我了解F1里面的MAPPING方法。
好了,今天的分享到这里。分享是我快乐,我是寒武青锋。
长沙真冷。