ABAP 알고리즘 문제: 최소 유효 시간 분할
예1, (20190101-20190105) +(20190103-20190107) =>(20190101-2019003) +(20190104-20190105) +(20190106-2019007)
사고방식 분석: 모든 시간점을 얻고 최소 범위를 나누어 시작 날짜가 유효 시간대에서 나온 것으로 판단하고 종료 날짜 +1을 새로운 시작 날짜로 한다.
코드는 다음과 같습니다.
LOOP AT lt_euilzw INTO ls_euilzw.
APPEND ls_euilzw-datefrom TO lt_date.
APPEND ls_euilzw-dateto TO lt_date.
ENDLOOP.
SORT lt_date.
DELETE ADJACENT DUPLICATES FROM lt_date.
CLEAR ls_euilzw-datefrom.
CLEAR ls_euilzw-dateto.
LOOP AT lt_date INTO DATA(ls_date).
IF ls_euilzw-datefrom IS NOT INITIAL.
LOOP AT lt_euilzw INTO DATA(ls_euilzw_q)
WHERE datefrom =< ls_euilzw-datefrom
AND dateto >= ls_euilzw-datefrom.
EXIT.
ENDLOOP.
IF sy-subrc <> 0.
CLEAR ls_euilzw-datefrom.
ENDIF.
ENDIF.
IF ls_euilzw-datefrom IS INITIAL.
ls_euilzw-datefrom = ls_date.
ELSE.
ls_euilzw-dateto = ls_date.
ENDIF.
IF ls_euilzw-datefrom = ls_euilzw-dateto.
CLEAR ls_euilzw-dateto.
ENDIF.
IF ls_euilzw-dateto IS NOT INITIAL.
APPEND ls_euilzw TO lt_euilzw_tmp.
ls_euilzw-datefrom = ls_euilzw-dateto + 1.
IF sy-subrc <> 0.
CLEAR ls_euilzw-datefrom.
ENDIF.
CLEAR ls_euilzw-dateto.
ENDIF.
ENDLOOP.
LOOP AT lt_euilzw_tmp INTO ls_euilzw.
WRITE :/ ls_euilzw-datefrom ,ls_euilzw-dateto.
ENDLOOP.
전재 대상:https://www.cnblogs.com/yibing-jia/p/11275161.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.