読者です 読者をやめる 読者になる 読者になる

タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

【AS400】RPGLE-数値日付の妥当性チェック

タイトルの件、やはり便利な命令が用意されていました。   これまでは、DSで年、月、日に分けて、閏年判定を交えて、オリジナル関数で処理させていましたが、TEST命令を使えば簡単に判定できることがわかりました。

サンプルはこちらです。

サンプルPGM

D MAIN            PR                  EXTPGM('SAMPLE37')    
D                                8P 0                       
D MAIN            PI                                        
D  P@YYMD                        8P 0                       
D*                                                          
 /FREE                                                      
     DSPLY P@YYMD;                                          
                                                            
    // 8桁日付                                             
     TEST(DE) *ISO P@YYMD;                                  
     IF %ERROR();                                           
         DSPLY ' パラメータ日付NG! ';                    
     ELSE;                                                  
         DSPLY ' パラメータ日付OK! ';                    
     ENDIF;                                                 
                                                            
    // 6桁日付                                             
     TEST(DE) *YMD P@YYMD;                                  
     IF %ERROR();                                           
         DSPLY ' パラメータ日付NG! ';   
     ELSE;                                 
         DSPLY ' パラメータ日付OK! ';   
     ENDIF;                                
                                           
     *INLR = *ON;                          
     RETURN;                               
 /END-FREE                                 

実行結果

> CALL PGM(TIGEROBJ/SAMPLE37) PARM(X'000150228F')   
  DSPLY    150228                                   
  DSPLY   パラメータ日付OK!                      
  DSPLY   パラメータ日付OK!                      
> CALL PGM(TIGEROBJ/SAMPLE37) PARM(X'020150229F')   
  DSPLY  20150229                                   
  DSPLY   パラメータ日付NG!                      
  DSPLY   パラメータ日付NG!                      
> CALL PGM(TIGEROBJ/SAMPLE37) PARM(X'000160229F') 
  DSPLY    160229                                 
  DSPLY   パラメータ日付OK!                    
  DSPLY   パラメータ日付OK!