直接上source: RPG22
FMT H HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++
*************** Beginning of data *****************************
0001.00 H DFTACTGRP(*NO) //main procedure使用PI代替*entry则default active group要为*no
0002.00 *
0003.00 DRPG22 PR
0004.00 D input1 D DatFmt(*ISO)
0005.00 *
0006.00 DRPG22 PI
0007.00 D input1 D DatFmt(*ISO)
0008.00 DNameData DS
0009.00 D 9 Inz('Monday')
0010.00 D 9 Inz('Tuesday')
0011.00 D 9 Inz('Wednesday')
0012.00 D 9 Inz('Thursday')
0013.00 D 9 Inz('Friday')
0014.00 D 9 Inz('Saturday')
0015.00 D 9 Inz('Sunday')
0016.00 DName 9 Dim(7) Overlay(NameData) //数组,DS的应用很巧妙
0017.00 DAnySunday C D'1999-06-13' //周日为7, 用随便一个周日做参照物, 很巧妙
0018.00 DWorkNum S 7 0
0019.00 DWorkDay S 1 0
0020.00 DDayName S 9
0021.00 D*WorkDate S D DatFmt(*ISO)//可以不要这个变量
0022.00 /free
0023.00 if %Parms() <> 1; //入口参数判断, 增加程序健壮性
0024.00 Dsply 'Parm Number Wrong.';
0025.00 Eval *inlr=*on;
0026.00 Return;
0027.00 endif;
0028.00
0029.00 Eval WorkNum=%Diff(input1: AnySunday: *DAYS); //自由格式没有SUBDUR,只能用%Diff()比较日期, 时间
0030.00 EVAL WorkDay=%Rem(WorkNum: 7); //自由格式也没取余MVR, 要用%Rem()
0031.00 if WorkDay < 1; //很巧妙的将负余数变为正的
0032.00 WorkDay=WorkDay + 7;
0033.00 endif;
0034.00
0035.00 DayName=Name(WorkDay); //数组结合DS, 很巧妙
0036.00 Dsply ('DayName is '+ DayName);
0037.00
0038.00 Eval *inlr=*on;
0039.00 Return;
0040.00 /end-free
****************** End of data ***********
说明:
1. 这是个极好的例子.
2. 数组+DS的组合使用非常巧妙.
3. 选择任意周日做为参照物也相当巧妙
4. 自由格式日期时间比较(相减)要用%Diff(),SUBDUR不适用于自由格式
5. 自由格式取余要用%Rem(),MVR不适用于自由格式
阅读(2498) | 评论(0) | 转发(0) |