ファイルのCCSID を調べるのは意外とやっかいである。
RTVFD
というコマンドは存在していないのである。
またファイル API によって CCSID を取得することもできるのだがAPI を使い慣れている人であっても長々とあのファイル API を書くのはかなり大変な作業となってしまう。
ところが RPG の INFDS
では簡単に CCSID を検索することができる。
そこでここでは RPG の INFDS
を使って CCSID を検索するコマンド : RTVCCSID
を紹介しよう。
CMD PROMPT(' ファィルの CCSID の検索 ') PARM KWD(FILE) TYPE(FILE) + PROMPT(' ファイル ') FILE: QUAL TYPE(*NAME) LEN(10) QUAL TYPE(*CHAR) LEN(10) DFT(*LIBL) + PROMPT(' ライブラリー ') PARM KWD(CCSID) TYPE(*DEC) LEN(5 0) RTNVAL(*YES) + PROMPT(' CCSID ')
CRTCMD CMD(MYLIB/RTVCCSID) PGM(MYLIB/RTVCCSIDCL) SRCFILE(MYSRCLIB/QCMDSRC) ALLOW(*BPGM *IPGM) AUT(*ALL)
PGM PARM(&FILFILLIB &CCSID) /*---------------------------------------------------------*/ /* RTVCCSID : ファィルの CCSID の検索 */ /*---------------------------------------------------------*/ DCL VAR(&MSG) TYPE(*CHAR) LEN(80) DCL VAR(&FILFILLIB) TYPE(*CHAR) LEN(20) DCL VAR(&FILE) TYPE(*CHAR) LEN(10) DCL VAR(&FILLIB) TYPE(*CHAR) LEN(10) DCL VAR(&CCSID) TYPE(*DEC) LEN(5 0) DCL VAR(&ADDPFM) TYPE(*CHAR) LEN(1) VALUE('0') CHGVAR VAR(&FILE) VALUE(%SST(&FILFILLIB 01 10)) CHGVAR VAR(&FILLIB) VALUE(%SST(&FILFILLIB 11 10)) CHKOBJ OBJ(&FILLIB/&FILE) OBJTYPE(*FILE) MBR(*FIRST) MONMSG MSGID(CPF9800) EXEC(DO) ADDPFM FILE(&FILLIB/&FILE) MBR(DMY) CHGVAR VAR(&ADDPFM) VALUE('1') ENDDO OVRDBF FILE(FILE) TOFILE(&FILLIB/&FILE) + SECURE(*YES) OVRSCOPE(*JOB) CALL PGM(ASNET.COM/RTVCCSID) PARM(&CCSID) DLTOVR FILE(FILE) LVL(*JOB) IF COND(&ADDPFM *EQ '1') THEN(DO) RMVM FILE(&FILLIB/&FILE) MBR(DMY) ENDDO RETURN ERROR: RCVMSG RMV(*NO) MSG(&MSG) SNDMSG: SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG) ENDPGM
CRTCLPGM PGM(MYLIB/RTVCCSIDCL) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)
H DATEDIT(*YMD/) COPYRIGHT('(C) OfficeQuattro Co,.Ltd Japan 2007-') F********** ファィルの CCSID の検索 ********************************** FFILE IF F 9999 DISK F INFDS(INFDS) F********************************************************************** D INFDS DS D CCSID# 218 219I 0 IFILE AA 10 I 1 9999 DATA C*----------------------------------------------------+ C *ENTRY PLIST C PARM CCSID 5 0 C*----------------------------------------------------+ C CCSID# IFEQ -1 C Z-ADD 65535 CCSID C ELSE C Z-ADD CCSID# CCSID C END C SETON LR C RETURN C READ FILE 50 C END TAG
CRTBNDRPG PGM(MYLIB/RTVCCSID) SRCFILE(MYSRCLIB/QRPGLESRC) AUT(*ALL)
コマンド RTVCCSID
は検索された結果としての CCSID を CCSID パラメータ( *DEC 5,0
)に
戻すのでコマンドのコンパイルも *BPGM *IPGM
としてバッチ用としてコンパイルしている。
CLP の中ではンバーがひとつも存在していないファイルであっても検査ができるように一時的に
DMY
というメンバーを追加して RPG * RTVCCSID
によって検査後に除去している。