안녕하세요.
오랜만에 질문 드리네요..^^
두 개의 인터널 테이블이 있습니다. 물론 헤더도 있고요..
gt_list 와 lt_list 입니다. 구조는 약간 다릅니다.
gt_list의 데이타 중에서 lt_list에 있는 데이타를 삭제하려고 합니다.
키는 POSNR이라고 가정합니다.
예를들어 다음과 같이 데이타가 있다고 가정하면,
gt_list
vbeln posnr
1234567890 000010
1234567890 000020
1234567890 000030
1234567890 000040
1234567890 000050
lt_list
vbeln posnr
1234567890 000010
1234567890 000030
1234567890 000050
와 같이 있을 때 최종적으로 gt_list에는
vbeln posnr
1234567890 000020
1234567890 000040
가 아니고요 <- 수정한 부분
vbeln posnr
1234567890 000010
1234567890 000030
1234567890 000050
가 되어야 하네요..잠시 착각을 으~~~
데이타가 들어있도록 해야 합니다.
뭐..gt_list와 lt_list의 차집합 정도 되겟네요..ㅠ.ㅠ
제가 구현한 방법은 좀 무식하지만
gt_list와 동일한 구조의 임시 itab을 선언(temp_gt_list)
loop at lt_list.
loop at gt_list.
if lt_iist-posnr = gt_list-posnr.
temp_gt_list= gt_data.
append temp_gt_list.
endif.
endloop.
endloop.
clear : gt_list, gt_list[].
gt_list[] = temp_gt_list[].
와 같이 했네요..물론 결과는 나옵니다면, 좀더 간결한 방법이 없을 까요?
조언 부탁드립니다.
고맙습니다.
댓글 6
-
홍성호
2007.11.23 22:28
-
김지성
2007.11.23 22:44
홍성호님 답변 감사드립니다.
제가 문의들 잘못하여 수정하여 올리네요.
-
홍맨
2007.11.23 22:54
그럼 결과가 lt_list와 같은건데요? -
김지성
2007.11.23 22:54
다음과 같이 변경했네요..
lt_temp[] = gt_list[].
clear : gt_list, gt_list[].
loop at lt_list.
read table lt_temp with key posnr = lt_list-posnr binaray search.
if sy-subrc eq 0.
gt_list = lt_temp.
appendgt_list
endif.
endloop.
-
hongman
2007.11.23 22:59
binaray search 를 사용하기 위해선 sort를 먼저 해주셔야 제 성능을 기대할 수 있습니다. -
김지성
2007.11.23 23:05
^^ 홍맨님..알겠습니다...위에 선언은 했네요..
이런 방법은 어떨까여?...
data : lt_temp like table of gt_list with header line.
sort lt_list by posnr.
sort gt_list by posnr.
lt_temp[] = gt_list.
loop at lt_list.
read table lt_temp with key posnr = lt_list-posnr transporting no fields binaray search.
if sy-subrc eq 0.
delete lt_temp where posnr = lt_list-posnr.
endif.
endloop.