0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

V6R1以降ではTEMPLATEというオプションが追加されており、ファイルがパラメータで扱える様になっています。随分と長い間、V5R4を使用していたせいか、V6R1以降の追加機能は全て新鮮に思えます。
複数の同形式実ファイル引数に取って、サブプロシージャに処理させる事も可能です。

USR406R.rpgle
     H****************************************************************
     H*-‚------------------------------*
     H*-‚---<<日付・著作権    >>-----*
     H*-‚------------------------------*
     H DATEDIT(*YMD)
     H COPYRIGHT('(C) ushiday - ')
     H*-‚------------------------------*
     H*-‚---<<コンパイル条件  >>-----*
     H*-‚------------------------------*
     H DFTACTGRP(*NO) ACTGRP(*NEW)
     F*ファイルテンプレートの定義
     FITEM_T    IF   E           K DISK
     F                                     TEMPLATE BLOCK(*YES)
     F                                     EXTDESC('ITEM')
     F*実ファイルの定義
     FFILE1                                LIKEFILE(ITEM_T )
     F                                     EXTFILE('ITEM')
     FFILE2                                LIKEFILE(ITEM_T )
     F                                     EXTFILE('ITEM')
     D*
     D*レコードテンプレートの定義
     D REC_T           DS                  LIKEREC(ITEMR : *INPUT)
     D                                     TEMPLATE
     D*実レコードの定義
     D REC1            DS                  LIKEDS(REC_T)
     D REC2            DS                  LIKEDS(REC_T)
     D*
     D COUNT           S              5S 0 INZ
     D*
     D print           PR                  EXTPROC('print')                     標準出力関数
     D    msg                      1000A   VARYING CONST
     C*-‚------------------------------*
     C*-‚---<<メインルーチン  >>-----*
     C*-‚------------------------------*
      /FREE

           DOW GET_NEXT_REC(FILE1 : REC1)
            AND GET_NEXT_REC(FILE2 : REC2)
            AND COUNT < 10                      ;
               print ( 'REC1(' + %EDITC(REC1.CODE :'X') + ')'
                           +  REC1.NAME ) ;
               print ( 'REC2(' + %EDITC(REC2.CODE :'X') + ')'
                           +  REC2.NAME ) ;
               COUNT += 1 ;
           ENDDO ;

           EXSR @END  ;

           //終了
           BEGSR   @END   ;
               *INLR = *ON    ;
               RETURN        ;
           ENDSR         ;

      /END-FREE
     P****************************************************************
     P** < GET_NEXT_REC      >: 次レコード取得                    **
     P****************************************************************
     P GET_NEXT_REC    B
     D GET_NEXT_REC    PI              N
     D  IFILE                              LIKEFILE(ITEM_T)                     入力ファイル
     D  DATA                               LIKEDS(REC_T)                        結果レコード
     D*-š---<<変数定義 >>-----*
      /FREE

           DOW 1 = 1             ;
               READ IFILE DATA         ;
               IF %EOF(IFILE )         ;
                   RETURN *OFF ;
               ENDIF                 ;
               RETURN *ON            ;
           ENDDO                 ;

           RETURN *OFF  ;

      /END-FREE
     P                 E

ファイルの引数は色々と使えそうな気がしますね。もう少し掘り下げて活用してみたいです。
ただし、今回のサンプルは、2つのファイルが同一なので、ODPが共用されているとFILE2の参照時にエラーになります。

●実行結果
2015-12-10_205311.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?