RPG

298. READP の注意点

RPG の READP命令(=Read Prevuous ) は直前のレコードを
逆読みする命令コードである。

あるファイルを READ 命令で読んでいるとする。
読んだ後で READP で 1レコードだけ遡って読む処理を入れている。
例えば次のようーな具合である。

           1      DO  20         N
                  READ  MYFILE               50
     50           LEAVE
                  ENDDO
                  READP MYFILE               50

この演算はつねに正しく動作するとは限らない。
なぜだろう?

それは READ MYFILE で EOF (=ファイルの終わり)を迎えて
しまった場合である。
DO-LOOP で 20レコードずつ読んでいるときに
EOF にはならなかった場合は READP によって
直前の最後の読取りレコードを再度、読取ることができる。
しかし EOF になった場合は READP は有効に動作しない。
EOF の直後に READP すれば最後のレコードを読取ることが
できそうに思えるが実際は動作しないのである。
これを解消するには

         50       *HIVAL   SETGT  MYFILE
                           READP  MYFILE

のように EOF のときには *HIVAL で SETGT してからなら
READP は最後のレコードを読みとってくれる。

READP は使用頻度は少ないかも知れないが
覚えておくと RPG の使用範囲が広がる。