collect

rjdqn·2024년 9월 9일

abap

목록 보기
11/13
DATA: BEGIN OF gs_data,
*        carrid type scarr-carrid,
        ftype, "flight type
        ftcnt TYPE i, "flight type cnt
      END OF gs_data,
      gt_data LIKE TABLE OF gs_data.

CLEAR: gs_data, gt_data.
*gs_data-carrid = 'AA'.
gs_data-ftype = 'D'.
gs_data-ftcnt = 1.
*APPEND gs_data TO gt_data. " append와 collect는 같이 잘 쓰지 않는다.

COLLECT gs_data INTO gt_data. " gt_data에 한 행이 추가되는게 아니라 문자열 같은거 있으면 숫자가 +1 된다.
" 완전히 레코드가 일치하면(숫자타입 제외) 값이 그냥 겹쳐지고 숫자필드가 +1 된다.

clear gs_data.
gs_data-ftype = 'D'.
gs_data-ftcnt = 2.
COLLECT gs_data INTO gt_data.   " 이 경우 숫자필드빼고 일치하므로 더해진다.

clear gs_data.
gs_data-ftype = 'A'.
gs_data-ftcnt = 2.
COLLECT gs_data INTO gt_data.   " 이 경우 불일치하므로 행이 하나 append 된다.

cl_demo_output=>display_data( gt_data ).

numeric 타입일경우 -> 걍 문자형임.
numeric : 나누기 빼기등 연산하면 안되는 숫자나열형

DATA: BEGIN OF gs_data,
*        carrid type scarr-carrid,
        ftype, "flight type
        ftnum TYPE n LENGTH 2,
*        ftcnt TYPE i, "flight type cnt
      END OF gs_data,
      gt_data LIKE TABLE OF gs_data.

CLEAR: gs_data, gt_data.
*gs_data-carrid = 'AA'.
gs_data-ftype = 'D'.
gs_data-ftnum = '01'.
*gs_data-ftcnt = 1.
*APPEND gs_data TO gt_data. " append와 collect는 같이 잘 쓰지 않는다.

COLLECT gs_data INTO gt_data. " gt_data에 한 행이 추가되는게 아니라 문자열 같은거 있으면 숫자가 +1 된다.
" 완전히 레코드가 일치하면(숫자타입 제외) 값이 그냥 겹쳐지고 숫자필드가 +1 된다.

CLEAR gs_data.
gs_data-ftype = 'D'.
gs_data-ftnum = '02'.
*gs_data-ftcnt = 2.
COLLECT gs_data INTO gt_data.   " append

CLEAR gs_data.
gs_data-ftype = 'A'.
gs_data-ftnum = '03'.
*gs_data-ftcnt = 2.
COLLECT gs_data INTO gt_data.   " append

cl_demo_output=>display_data( gt_data ).

float든 integer이든 collect는 철저히 문자열만(numeric 포함)만 비교하는듯하다.

DATA: BEGIN OF gs_data,
*        carrid type scarr-carrid,
        ftype, "flight type
*        ftnum TYPE n LENGTH 2,
        ftcnt TYPE i, "flight type cnt
        ftcnt2 type i,
        ftppp type p DECIMALS 2, "float type
      END OF gs_data,
      gt_data LIKE TABLE OF gs_data.

CLEAR: gs_data, gt_data.
*gs_data-carrid = 'AA'.
gs_data-ftype = 'D'.
*gs_data-ftnum = '01'.
gs_data-ftcnt = 1.
gs_data-ftcnt2 = 2.
gs_data-ftppp = '3.1'.


COLLECT gs_data INTO gt_data. " gt_data에 한 행이 추가되는게 아니라 문자열 같은거 있으면 숫자가 +1 된다.
" 완전히 레코드가 일치하면(숫자타입 제외) 값이 그냥 겹쳐지고 숫자필드가 +1 된다.

CLEAR gs_data.
gs_data-ftype = 'D'.
*gs_data-ftnum = '02'.
gs_data-ftcnt = 2.
gs_data-ftcnt2 = 3.
gs_data-ftppp = '0.89'.
COLLECT gs_data INTO gt_data.   

CLEAR gs_data.
gs_data-ftype = 'A'.
*gs_data-ftnum = '03'.
gs_data-ftcnt = 2.
COLLECT gs_data INTO gt_data.   

cl_demo_output=>display_data( gt_data ).

profile
대학생

0개의 댓글