ここで紹介する「日付の妥当性検査 ( DATCHK )」コマンドは CLP 等で入力された日付が
正しいかどうかを、簡単にチェックできるコマンドである。
日付が誤っていれば DATCHK コマンドは CPF9897 を *ESCAPE として戻すので
MONMSG を使って判断することができる。
DATCHK コマンドは例えば次のようにして簡単に使用することができる。
--------------------------------------------------------------------------
0001.00 PGM
0002.00 DCL VAR(&DATE) TYPE(*CHAR) LEN(6)
0003.00
0004.00 CHGVAR VAR(&DATE) VALUE('110229') /* +
0005.00 2011/02/29 を検査 */
0006.00 TEST.COM/DATCHK DATE(&DATE)
0007.00 MONMSG MSGID(CPF9800) EXEC(DO)
0008.00 SNDPGMMSG MSG(' 日付のエラー ') MSGTYPE(*DIAG)
0009.00 RETURN
0010.00 ENDDO
0011.00 SNDPGMMSG MSG(' 日付は正しい ') MSGTYPE(*DIAG)
0012.00
0013.00 ENDPGM
--------------------------------------------------------------------------
変数 &DATE に 2011年02月29日(これは誤り) を CHGVAR で入力して
DATCHK コマンドに渡すと、エラーであれば CPF9897 が戻るので
MONMSG CPF9800 を入れておけばエラーを監視することができる。
何も戻らなければ日付は正しいと判定することができる。
このような日付の妥当性検査 DATCHK は、様々な場面で重宝するはずである。
DATCHK コマンドの動作原理は簡単であり OS400 の CVTDAT を実行してみて
エラーがないかどうかを判定しているだけである。
以下に DATCHK コマンドと実行CLP を紹介する。
-----------------------------------------------------------------
0001.00 CMD PROMPT(' 日付のチェック ')
0002.00 PARM KWD(DATE) TYPE(*CHAR) LEN(6) +
0003.00 PROMPT(' 日付 (YMD)')
-----------------------------------------------------------------
コンパイルは
CRTCMD CMD(MYLIB/DATCHK) PGM(MYLIB/DATCHKCL) SRCFILE(MYSRCLIB/QCMDSRC AUT(*ALL)
--------------------------------------------------------------------------------- 0001.00 PGM PARM(&INDATE) 0002.00 /*---------------------------------------------------------*/ 0003.00 /* DATCHKCL : 日付のチェック */ 0004.00 /*---------------------------------------------------------*/ 0005.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0006.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) 0007.00 DCL VAR(&INDATE) TYPE(*CHAR) LEN(6) 0008.00 DCL VAR(&OUTDAT) TYPE(*CHAR) LEN(6) 0009.00 0010.00 CVTDAT DATE(&INDATE) TOVAR(&OUTDAT) FROMFMT(*YMD) + 0011.00 TOFMT(*DMY) TOSEP(*NONE) 0012.00 MONMSG MSGID(CPF0550 CPF0552 CPF0553 CPF0555 + 0013.00 CPF0556 CPF0557) EXEC(DO) 0014.00 RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) 0015.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + 0016.00 MSGTYPE(*ESCAPE) 0017.00 ENDDO 0018.00 ENDPGM ---------------------------------------------------------------------------------
コンパイルは
CRTCLPGM PGM(MYLIB/DATCHKCL) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)