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 の使用範囲が広がる。