您好,欢迎来到步遥情感网。
搜索
您的当前位置:首页SAP ABAP算法题:拆分最小有效时间段

SAP ABAP算法题:拆分最小有效时间段

来源:步遥情感网

ABAP算法题:拆分最小有效时间段
需求场景: 输入N个时间段,拆分成不重复的,最小时间段
例1, (20190101 - 20190105 ) + ( 20190103 - 20190107) => ( 20190101-20190103) + (20190104-20190105)+(20190106-20190107)
思路分析:取得所有时间点,并划分最小范围,判断开始日期出于有效时间段内,并将结束日期+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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- obuygou.com 版权所有 赣ICP备2024042798号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务