728x90
반응형
선언만 된 상태에서는 필드 심볼은 다른 데이터 오브젝트를 가리킬 수 있는 포인터만 생성된다. 프로그램이 실행되고 ASSIGN 구문을 만나게 되면 포인터가 데이터 오브젝트에 연결된다. 그리고 필드 심볼의 값을 변경하게 되면 변숫값도 변경된다.
특징
필드심볼은 메모리 값을 할당하지 않는다.
필드심볼 타입 따로 지정안해주면, 명시되지 않으면 TYPE ANY로 되서 할당되는 필드와 타입 맞춰준다.
필드심볼은 generic type과 fully type으로 구분된다.
fully type : 필드심볼의 기술적인 속성은 할당되는 데이터 오브젝트와 같아야한다. 선언할때부터 타입이 정해진다.
generic type : 할당되는 데이터 오브젝트 유형에 따라 기술적인 속성을 상속받는다. ASSIGN될때 기술적 타입이 결정된다.
Field Symbol Assign
- 기본적으로 ASSIGN 구문을 이용하여 할당을 한다.
- Variable, Internal Table, Structure 모두 할당이 가능하다.
DATA: BEGIN OF GS_DATA,
VAR1 TYPE I,
VAR2 TYPE I,
VAR3 TYPE I,
END OF GS_DATA,
GT_DATA LIKE TABLE OF GS_DATA.
FIELD-SYMBOLS : <FS_TAB> TYPE ANY TABLE,
<FS_STRC> LIKE GS_DATA.
CLEAR: GS_DATA.
GS_DATA-VAR1 = 10.
GS_DATA-VAR2 = 20.
GS_DATA-VAR3 = 30.
APPEND GS_DATA TO GT_DATA.
CLEAR: GS_DATA.
GS_DATA-VAR1 = 40.
GS_DATA-VAR2 = 50.
GS_DATA-VAR3 = 60.
ASSIGN GT_DATA TO <FS_TAB>.
LOOP AT <FS_TAB> ASSIGNING <FS_STRC>.
WRITE:/ <FS_STRC>-VAR1, <FS_STRC>-VAR2, <FS_STRC>-VAR3.
ENDLOOP.
디버깅을 보면 이해하기 그나마 쉽다..
Field Symbol Dynamic Assign
- 사용하려는 필드명이 프로그램 실행도중 결정이 되는 경우 사용한다.
- ASSIGN (FIELDNAME) TO
<FS>
DATA: GV_VAL1 TYPE C VALUE 'A',
GV_VAL2 TYPE C VALUE 'B',
GV_VAL3 TYPE C VALUE 'C',
GV_VAL4 TYPE C VALUE 'D',
GV_VAL5 TYPE C VALUE 'E'.
DATA: GV_FNAME TYPE CHAR20,
GV_INDEX TYPE N.
FIELD-SYMBOLS <FS>, "ANY TYPE
DO 5 TIMES.
CLEAR: GV_FNAME.
GV_INDEX = SY-INDEX.
CONCATENATE 'GV_VAL' GV_INDEX INTO GV_FNAME. "GV_VAL+GV_INDEX => GV_FNAME에 들어가서
ASSIGN (GV_FNAME) TO <FS>.
"여기서 GV_FNAME은 CHAR20의 GV_FNAME이 아닌 위에 GV_VAL+GV_INDEX가 된다
"만약 1번째 줄이면 GV_FNAME은 GV_VAL1이 된다.
WRITE: / GV_FNAME, ':', <FS>.
ENDDO.
만약 1번째 TIME이라면 SY-INDEX는 1번째줄이 되고 GV_FNAME은 GV_VAL1이 된다. ASSIGN뒤에 오는 GV_FNAME은 그러면 GV_VAL1이 되는거고 GV_VAL1의 해당 값 VALUE를 <FS>
에 넣어주게 된다.
Field Symbol Structure Field Assign
- Structure의 개별 필드를 필드 심볼에 Assign
- ASIGN COMPONENT [COMP] OF [STRUCTURE] TO
<FS>
- ASSIGN COMPONENT 필드순서, 필드명 OF STURCTURE
<FS>
DATA: BEGIN OF GS_DATA,
VAR1 TYPE CHAR10,
VAR2 TYPE CHAR10,
VAR3 TYPE CHAR10,
END OF GS_DATA,
GT_DATA LIKE TABLE OF GS_DATA.
FIELD-SYMBOLS : <FS>,
<FS_STRC> LIKE GS_DATA.
CLEAR: GS_DATA.
GS_DATA-VAR1 = 10.
GS_DATA-VAR2 = 20.
GS_DATA-VAR3 = 30.
APPEND GS_DATA TO GT_DATA.
CLEAR: GS_DATA.
GS_DATA-VAR1 = 40.
GS_DATA-VAR2 = 50.
GS_DATA-VAR3 = 60.
APPEND GS_DATA TO GT_DATA.
LOOP AT GT_DATA ASSIGNING <FS_STRC>..
DO 3 TIMES.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE <FS_STRC> TO <FS>.
"1번째 INDEX면 FS_STRC의 첫번째줄이 해당
WRITE: <FS>.
ENDDO.
WRITE: /.
ENDLOOP.
728x90
반응형
댓글