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

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 = 'A'.
lw_ztab-b = 'B'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'B'.
lw_ztab-b = 'D'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'B'.
lw_ztab-b = 'E'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'D'.
lw_ztab-b = 'M'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'M'.
lw_ztab-b = 'W'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'M'.
lw_ztab-b = 'L'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'C'.
lw_ztab-b = 'F'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'F'.
lw_ztab-b = 'N'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'C'.
lw_ztab-b = 'G'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'C'.
lw_ztab-b = 'H'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'A'.
lw_ztab-b = 'C'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'A1'.
lw_ztab-b = 'B1'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'B1'.
lw_ztab-b = 'D1'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'B1'.
lw_ztab-b = 'E1'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'D1'.
lw_ztab-b = 'M1'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'C1'.
lw_ztab-b = 'F1'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'F1'.
lw_ztab-b = 'N1'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'C1'.
lw_ztab-b = 'G1'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'C1'.
lw_ztab-b = 'H1'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'A1'.
lw_ztab-b = 'C1'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'X'.
lw_ztab-b = 'Y'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'X'.
lw_ztab-b = 'C'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'X1'.
lw_ztab-b = 'Y1'.
APPEND lw_ztab TO lt_ztab.
lw_ztab-a = 'X1'.
lw_ztab-b = 'B'.
APPEND lw_ztab TO lt_ztab.
lw_mtab-m = 'A'.
APPEND lw_mtab TO lt_mtab.
lw_mtab-m = 'A1'.
APPEND lw_mtab TO lt_mtab.
lw_mtab-m = 'X'.
APPEND lw_mtab TO lt_mtab.
lw_mtab-m = '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 a = lw_mtab-m.
    l_a = lw_ztab-a.
    l_b =  lw_ztab-b .
    PERFORM: get_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-a = p_a.
  lt_ltab-b = p_b.
  APPEND lt_ltab.
  READ TABLE lt_ztab WITH KEY a = p_b BINARY SEARCH.
  IF sy-subrc NE 0.
    EXIT.
  ELSE.
    LOOP AT lt_ztab INTO lw_ztab1 WHERE a = p_b.
      PERFORM: get_lastdata USING p_a lw_ztab1-b .
    ENDLOOP.
  ENDIF.
ENDFORM. 
执行结果:

                    
                
                
            
        
浙公网安备 33010602011771号