CL

150. 10分後にファイルを消滅させるには


一時的にファイルを作成して表示などをしたら自動的に削除しておきたい場合がある。
特にIFSに一時的に作成したときには削除しておかないといつまでも
ハード・ディスクにゴミのファイルが増え続けてしまう。
そこでここでは自動的にファイルを消滅させる方法を紹介する。
よく製品でIFSにファイルを作成しているのを見ると
いつ削除されるのですか?という質問を受けるのだが
弊社の製品では不要になったファイルは自動消滅するように仕組んであるので
ご心配なく。

[サンプルCLP: TESTTIMCL ]

ソースはこちらから

0001.00              PGM                                                        
0002.00 /*-------------------------------------------------------------------*/ 
0003.00 /*   TESTTIMCL  :  10 分後に消滅させるには                           */ 
0004.00 /*                                                                   */ 
0005.00 /*   2021/11/21  作成                                                */ 
0006.00 /*-------------------------------------------------------------------*/ 
0007.00 /*( IFS のファイル名 )*/                                                
0008.00              DCL        VAR(&IFS_FILE) TYPE(*CHAR) LEN(512)             
0009.00 /*( 10 分後に消滅させるための変数 )*/                                   
0010.00              DCL        VAR(&DATETIME) TYPE(*CHAR) LEN(20)              
0011.00              DCL        VAR(&DATE) TYPE(*CHAR) LEN(6)                   
0012.00              DCL        VAR(&TIME) TYPE(*CHAR) LEN(6)                   
0013.00              DCL        VAR(&HH) TYPE(*DEC) LEN(2 0)                    
0014.00              DCL        VAR(&HHC) TYPE(*CHAR) LEN(2)                    
0015.00              DCL        VAR(&MM) TYPE(*DEC) LEN(2 0)                    
0016.00              DCL        VAR(&MMC) TYPE(*CHAR) LEN(2)                    
0017.00              DCL        VAR(&SS) TYPE(*DEC) LEN(2 0)                    
0018.00              DCL        VAR(&SSC) TYPE(*CHAR) LEN(2)                    
0019.00                                                                         
0020.00 /*( 環境の取得 )*/                                                      
0021.00              RTVJOBA    DATETIME(&DATETIME)                             
0022.00                                                                         
0023.00 /*( ファイル名を指定する )*/                                            
0024.00              CHGVAR     VAR(&IFS_FILE) +                              
0025.00                           VALUE('/AS400-NET.USR/TEMP/QTR_903779.XML') 
0026.00 /*( 10 分後に一時ファイルを消す )*/                                   
0027.00              RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&DATE)                   
0028.00              RTVSYSVAL  SYSVAL(QTIME) RTNVAR(&TIME)                   
0029.00              CHGVAR     VAR(&HH) VALUE(%SST(&TIME 1 2))               
0030.00              CHGVAR     VAR(&MM) VALUE(%SST(&TIME 3 2))               
0031.00              CHGVAR     VAR(&SS) VALUE(%SST(&TIME 5 2))               
0032.00              CHGVAR     VAR(&MM) VALUE(&MM + 10)                      
0033.00              IF         COND(&MM >= 60) THEN(DO)                      
0034.00              CHGVAR     VAR(&HH) VALUE(&HH + 1)                       
0035.00              CHGVAR     VAR(&MM) VALUE(1)                             
0036.00              ENDDO                                                    
0037.00              CHGVAR     VAR(&HHC) VALUE(&HH)                          
0038.00              CHGVAR     VAR(&MMC) VALUE(&MM)                          
0039.00              CHGVAR     VAR(&SSC) VALUE(&SS)                          
0040.00              CHGVAR     VAR(&TIME) VALUE(&HHC *CAT &MMC *CAT &SSC)    
0041.00              SBMJOB     CMD(RMVLNK OBJLNK(&IFS_FILE)) JOB(DLTIFS) +   
0042.00                           SCDDATE(&DATE) SCDTIME(&TIME) MSGQ(*NONE)   
0043.00                                                                       
0044.00              ENDPGM      


                                             

[コンパイル]

CRTCLPGM PGM(OBJLIB/TESTTIMCL) SRCFILE(MYSRCLIB/QCLSRC) AUT(*ALL)

[解説]

IFS のファイルは RMVLNKコマンドで消滅させることができる。

0032.00              CHGVAR     VAR(&MM) VALUE(&MM + 10)                      
0033.00              IF         COND(&MM >= 60) THEN(DO)                      
0034.00              CHGVAR     VAR(&HH) VALUE(&HH + 1)                       
0035.00              CHGVAR     VAR(&MM) VALUE(1)                             
0036.00              ENDDO

によって10分間を加算している。

0041.00              SBMJOB     CMD(RMVLNK OBJLNK(&IFS_FILE)) JOB(DLTIFS) +   
0042.00                           SCDDATE(&DATE) SCDTIME(&TIME) MSGQ(*NONE)

によってSBMJOBでバッチ・ジョブでRMVLNKさせて MSGQ(*NONE)であるので
余計なメッセージが戻ることもなく自然消滅する。
よく使うテクニックなので覚えておくと便利である。