아래 소스중에 이해가 안가는 것이 있어서 질문을 드립니다.
1. 결과내용중에 AT NEW와 AT END 어떻게 이해가 안갑니다.
단순하게 생각하면 234가 나올것 같은데..
2.
itab2-fld_a = 'a'. itab2-fld_b = 'b'. APPEND itab2.
itab2-fld_a = 'a'. itab2-fld_b = 'b'. APPEND itab2.
itab2-fld_a = 'a'. itab2-fld_b = 'b'. APPEND itab2.
itab2-fld_a = 'b'. itab2-fld_b = 'b'. APPEND itab2.
itab2-fld_a = 'b'. itab2-fld_b = 'c'. APPEND itab2.
를 사용해서
AT NEW fld_b. 와
AT END OF fld_b. 와 연결했는데
결과에는 a와 b가 전혀 안나오던데 왜 위 내용을 작성해서 연결했는지 이해가
안갑니다. 자세한 설명부탁합니다.
DATA: BEGIN OF itab2 OCCURS 0,
fld_a(10),
fld_b(10).
DATA: END OF itab2.
itab2-fld_a = 'a'. itab2-fld_b = 'b'. APPEND itab2.
itab2-fld_a = 'a'. itab2-fld_b = 'b'. APPEND itab2.
itab2-fld_a = 'a'. itab2-fld_b = 'b'. APPEND itab2.
itab2-fld_a = 'b'. itab2-fld_b = 'b'. APPEND itab2.
itab2-fld_a = 'b'. itab2-fld_b = 'c'. APPEND itab2.
LOOP AT itab2.
AT FIRST.
WRITE:/ 'At first : ', sy-tabix.
ENDAT.
AT NEW fld_b.
WRITE:/ ' - At new : ', sy-tabix.
ENDAT.
AT LAST.
WRITE:/ 'At last : ', sy-tabix.
ENDAT.
*ON CHANGE OF fld_a.
* WRITE:/ 'on chang of : ', sy-tabix.
*ENDON.
ENDLOOP.
ULINE.
LOOP AT itab2.
AT FIRST.
WRITE:/ 'At first : ', sy-tabix.
ENDAT.
AT END OF fld_b.
WRITE:/ ' - At end : ', sy-tabix.
ENDAT.
AT LAST.
WRITE:/ 'At last : ', sy-tabix.
ENDAT.
*ON CHANGE OF fld_b.
* WRITE:/ 'on chang of : ', sy-tabix.
*ENDON.
ENDLOOP.
다섯 개의 레코드에 대한 루프를 돌면서 수행되는 결과를 보면
1 LOOP : AT First 는 loop 가 처음으로 수행될 때 실행되므로 일단 1을 찍습니다.
At New fld_b 는 fld_b 필드값이 새로운 값일 경우 수행되므로 역시 1을 찍습니다.
At Last 는 LOOP 의 마지막에 수행되므로 통과합니다.
2 LOOP : At First 는 통과
At New 는 값이 'b' 로 동일하므로 통과
At Last 도 역쉬 통과
3 LOOP : 2 LOOP 와 마찬가지므로 통과
4 LOOP : At First 는 통과
AT New fld_b 가 동일한 'b' 인 것 같지만 앞의 fld_a 가 달라졌으므로 다른값으로 인식합니다. 그러므로 4 를 찍습니다.
At Last 는 통과.
5 LOOP : At first 는 통과
At New fld_b 값이 변경되었으므로 다른 값으로 인식 5를 찍습니다.
At Last 는 마지막 레코드이므로 5 를 찍습니다..
결과적으로 다음과 같이 나오죠~
At first : 1
- At new : 1
- At new : 4
- At new : 5
At last : 5
포인트는 4 LOOP 에서 fld_b 값이 동일한테 4가 찍히는 것에 헷갈릴 수가 있는데.. AT 문장은 지정한 필드 앞의 필드들을 합해서
비교를 한다고 보시면 되겠습니다..
2번째의 LOOP 는 위에꺼랑 비교해보시면 아실 것 같습니다. ^^*