zoukankan      html  css  js  c++  java
  • 【ABAP系列】SAP ABAP 取两个内表的交集 比较两个内表的不同

    公众号:matinal
    本文作者:matinal
     

    前言部分

    大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。

    正文部分

    SAP自带的函数:
    CTVB_COMPARE_TABLES和BKK_COMPARE_TABLES;
    似乎可以比较两个内表,得出第二个内表不同于第一个内表的部分(新增/删除了那些部分)

    但是,具体的使用,还请有经验的朋友不吝赐教啊!
    因为,我在测试数据时,发现这两个函数的效果不那么简单。
    如果上述函数确实可以,提取两个内表不同部分,则我可以据此做两次比较,得到两个内表的交集。
    所以,我先用另外一种方式解决了-自己写了一个提取两个内表交集的函数,供大家检阅:

    *"  IMPORTING
    *"     VALUE(ITAB1) TYPE  INDEX TABLE
    *"     VALUE(ITAB2) TYPE  INDEX TABLE
    *"  EXPORTING
    *"     VALUE(ITABSAME) TYPE  INDEX TABLE
    *"----------------------------------------------------------------------

      field-symbols:
        <S1>,
        <S2>.
      data:
        L1 type i,
        L2  type i.

      assign local copy of initial line of:
             ITAB1 to <S1>,
             ITAB2 to <S2>.
      describe: table ITAB1 lines L1,
                table ITAB2 lines L2.

    "对记录行数少的内表,执行第一层循环;
    "在第二层循环中,找到对应记录,即可追加到结果内表;
    "同时退出第二层循环,继续执行第一层循环的下一行
    IF L1 <= L2.
      LOOP AT ITAB1 INTO <S1>.
        LOOP AT ITAB2 INTO <S2>.
          IF <S1> EQ <S2>.
            APPEND <S1> TO ITABSAME.
            EXIT.
          ENDIF.
        ENDLOOP.
      ENDLOOP.
    ELSE.
      LOOP AT ITAB2 INTO <S2>.
        LOOP AT ITAB1 INTO <S1>.
          IF <S1> EQ <S2>.
            APPEND <S2> TO ITABSAME.
            EXIT.
          ENDIF.
        ENDLOOP.
      ENDLOOP.
    ENDIF.
    ENDFUNCTION.

    另一个问题,想请教大家,在上面代码里,第二层循环是为了找出,第一层循环的当前记录,在第二个内表里是否存在;

    所以,如果ABAP自带了,判断一个内表中,是否存在某个记录的函数的话,那第二层循环就可以省去,则上述函数执行效率也会成倍提升了。

    以下转自华亭博客:感谢华亭的分享:

    函数模块:CTVB_COMPARE_TABLES
    这个函数模块比较两个内表,将被删除、增加和修改的内表行分别分组输出。

    输入参数:
    TABLE_OLD:旧表
    TABLE_NEW:新表
    KEY_LENGTH:键长度,指定内表中的前若干个字节(在 Unicode 系统中为字符,因此指定长度内不能存在数值类型的字段)为主键,做为内表行是否为增加的判断条件。
    IF_SORTED:排序标记,如果已排序,在比较时可以提高效率。

    输出参数:
    TABLE_DEL:被删除的行
    TABLE_ADD:被增加的行
    TABLE_MOD:被修改的行
    NO_CHANGES:表没有被修改的标记,如果这个标记为 “X”,就不必去读前面三个内表了。

  • 相关阅读:
    linux下启动和关闭网卡命令及DHCP上网
    python 编码问题
    paddlepaddle
    Convolutional Neural Network Architectures for Matching Natural Language Sentences
    deep learning RNN
    Learning Structured Representation for Text Classification via Reinforcement Learning 学习笔记
    Python IO密集型任务、计算密集型任务,以及多线程、多进程
    EM 算法最好的解释
    tensorflow 调参过程
    tensorflow 学习纪录(持续更新)
  • 原文地址:https://www.cnblogs.com/SAPmatinal/p/11176482.html
Copyright © 2011-2022 走看看