ここで紹介する「日付の妥当性検査 ( 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)