Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345616
  • 博文数量: 90
  • 博客积分: 847
  • 博客等级: 准尉
  • 技术积分: 1373
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-02 10:54
个人简介

跌打滚爬中的小菜鸟...

文章分类

全部博文(90)

文章存档

2015年(5)

2013年(47)

2012年(38)

我的朋友

分类: 其他UNIX

2013-09-21 14:30:46

直接上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不适用于自由格式

阅读(2378) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~