RPG

182. 可変長ファイルを扱うには ? (1)

ここでは任意の長さのファイルを汎用的に処理する方法を紹介する。
様々などのようなファイルでも読み取る機能を実現するにはファイルを外部記述として
読み取ることはできないので、十分大きなレコード長の内部記述ファイルとして定義しなければならない。

【 サンプル: TESTVAR1 】
-----------------------------------------------------------------------------------------
0001.00 H DFTNAME(TESTVAR1) DATEDIT(*YMD/)                                               
0002.00 F**********  可変長ファイルの読取り ***********************************          
0003.00 FDATAFL    IF   F 9999        DISK    EXTFILE(FILE_LIB)                          
0004.00 F                                     USROPN                                     
0005.00 F**********************************************************************          
0006.00 D FILE_LIB        S             48A                                              
0007.00 IDATAFL    AA  10                                                                
0008.00 I                                  1 9999  DATA                                  
0009.00 C                   EVAL      FILE_LIB = 'QTRFIL/SHOHIN'                         
0010.00 C                   OPEN      DATAFL                               99            
0011.00 C     *IN99         IFEQ      *OFF                                               
0012.00 C                   DO        *HIVAL                                             
0013.00 C                   READ      DATAFL                                 50          
0014.00 C   50              LEAVE                                                        
0015.00 C                   MOVEL     DATA          DSP40            40                  
0016.00 C     DSP40         DSPLY                                                        
0017.00 C                   END                                                          
0018.00 C                   CLOSE     DATAFL                                             
0019.00 C                   END                                                          
0020.00 C     '*EOF'        DSPLY                   ANS               1                  
0021.00 C                   SETON                                        LR              
0022.00 C                   RETURN                                                       
-----------------------------------------------------------------------------------------
【 解説 】

DATAFL9999 バイト長のファイルとして定義しているので、このプログラムの実行の直前に
OVRDBF DATAFL TOFILE( ..... ) を実行してやれば、どのようなファイルでも読み取ることができる。
このサンプルは読み取り用であるが、この方法であれば、もちろん更新やレコードの追加も行うことができる。