RPG

207. レコードを読まずに終わりを知るには ?

READ 命令によってレコードを読めば、それ以上レコードがない、
つまりファイルの終わりに達したということが判明するが、これを
レコードを読まずに判定できる方法はないものだろうか ?
実は、実際にレコードを読まなくても SETGT によって
キーを位置付けるだけで判定することができるのである。

SETGT (上限のセット) ・・・・・・ キーをセットした後ろにレコードが存在しない場合は
54桁目の標識がオンになり、NOT %FOUND となる。
【例】
C     'NV-CF1    '  SETGT     SHOHIN                             50
C                   IF        NOT %FOUND
C     'NOT FOUND'   DSPLY                   ANS               1
C                   ELSE
C     'FOUND'       DSPLY                   ANS               1
C                   ENDIF
【解説】

商品マスター(SHOHIN) に対して NV-CF1 という商品コードで SETGT でセット
した場合に NV-CF1 の次のレコードが存在しない場合は
標識 50 がオンになり、NOT FOUND と表示される。

レコードを読まずに EOF を知ることができるようにするのは意味がある。
READ 命令でレコードを実際に読んだのでは、レコードが存在したしたときには
読まれたレコードのフィール値が書き換えられたしまうからである。
フィールド値を更新せずら、あらかじめ次のレコードは、もはや存在しない、ということを
知ることができれば Web アプリケーションで HTML に、そのことを非表示(HIDDEN) で
記述したおけば、エンド・ユーザーが「次へ」ボタンを押したときに
JavaScript の alert によって「レコードがありません。」のようなエラー・メッセージを
直ちに出すことができる。