需求:计算下面树形结构中每个子节点与最上层父节点的对应关系。

DATA:BEGIN OF lt_ztab OCCURS 0,
      a  TYPE string,
      b  TYPE string,
     END OF lt_ztab.
DATA:lw_ztab LIKE LINE OF lt_ztab,
     lw_ztab1 LIKE LINE OF lt_ztab,
     lt_ltab LIKE TABLE OF lt_ztab WITH HEADER LINE.

DATA:BEGIN OF lt_mtab OCCURS 0,
      m  TYPE string,
END OF lt_mtab.

DATA:lw_mtab LIKE LINE OF lt_mtab.
DATA:l_a TYPE string,
     l_b TYPE string.
lw_ztab-'A'.
lw_ztab-'B'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'B'.
lw_ztab-'D'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'B'.
lw_ztab-'E'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'D'.
lw_ztab-'M'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'M'.
lw_ztab-'W'.
APPEND lw_ztab TO lt_ztab.


lw_ztab-'M'.
lw_ztab-'L'.
APPEND lw_ztab TO lt_ztab.


lw_ztab-'C'.
lw_ztab-'F'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'F'.
lw_ztab-'N'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'C'.
lw_ztab-'G'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'C'.
lw_ztab-'H'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'A'.
lw_ztab-'C'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'A1'.
lw_ztab-'B1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'B1'.
lw_ztab-'D1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'B1'.
lw_ztab-'E1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'D1'.
lw_ztab-'M1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'C1'.
lw_ztab-'F1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'F1'.
lw_ztab-'N1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'C1'.
lw_ztab-'G1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'C1'.
lw_ztab-'H1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'A1'.
lw_ztab-'C1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'X'.
lw_ztab-'Y'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'X'.
lw_ztab-'C'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'X1'.
lw_ztab-'Y1'.
APPEND lw_ztab TO lt_ztab.

lw_ztab-'X1'.
lw_ztab-'B'.
APPEND lw_ztab TO lt_ztab.

lw_mtab-'A'.
APPEND lw_mtab TO lt_mtab.

lw_mtab-'A1'.
APPEND lw_mtab TO lt_mtab.

lw_mtab-'X'.
APPEND lw_mtab TO lt_mtab.

lw_mtab-'X1'.
APPEND lw_mtab TO lt_mtab.

SORT lt_ztab BY a b.

LOOP AT lt_mtab INTO lw_mtab.
  LOOP AT lt_ztab INTO lw_ztab WHERE lw_mtab-m.

    l_a lw_ztab-a.
    l_b =  lw_ztab-.

    PERFORMget_lastdata USING l_a l_b .

  ENDLOOP.
ENDLOOP.

LOOP AT lt_ltab.
  WRITE/ lt_ltab-a,lt_ltab-b.
ENDLOOP.

 

FORM get_lastdata USING p_a TYPE string  p_b TYPE string.

  lt_ltab-p_a.
  lt_ltab-p_b.
  APPEND lt_ltab.

  READ TABLE lt_ztab WITH KEY p_b BINARY SEARCH.
  IF sy-subrc NE 0.
    EXIT.
  ELSE.
    LOOP AT lt_ztab INTO lw_ztab1 WHERE p_b.
      PERFORMget_lastdata USING p_a lw_ztab1-.
    ENDLOOP.
  ENDIF.

ENDFORM

 

 

执行结果:

posted on 2013-06-26 10:52  风语/仝  阅读(3532)  评论(0编辑  收藏  举报