RPG

330. 知らなかった READC (Read Change) (1)

RPG Ⅲ, ILE-RPG を問わず READC ( =Read Change ) は RPG の非常に
便利な命令である。
何をする命令かと言うと 入力や変更のあった SFL レコードだけを選んで読取る
命令である。
時々 READC は知らなかった、いつできたのですか?と問われることがあるが
RPG Ⅲ の当初から存在している。
リリースの途中で追加されたのではない。
COBOL では READ-SUBFILE-NEXT-MODIFIED が READC に相当する。
READC をご存知ない開発者が結構多いのでここに紹介することにした。

さて READC を使うと変更のあった SFL レコードだけを読取ることができるので
SFL レコードの入力画面で

  • READC で読取った SFL レコードだけを処理の対象とすれば
    パフォーマンスに優れた処理プログラムとすることができる。
    入力や変更のなかったレコードを読み取る必要はない。
  • READC によって読取られた SFL レコードが何もなかった場合は
    エンド・ユーザーが何もせずにただ実行キーを押しただけであると
    判定することができる。
  • エラーのあった SFL レコードは次回の READC による読取りで
    必ず読取るように指示することができる。
    これによってエラー・レコードが補正されずに処理されてしまうことを
    防ぐことができる。( SFLNXTCHG )

このような処理をできる利点がある。
もし READC を使わなければ、

  • 出力前の SFL レコードを配列に保管しておいて SFL レコードを
    読取ったら出力前の保管済みの SFL レコードといちいち比較して
    変更を検知しなければならない。
  • 従って配列数の数以上のレコードの SFL レコードを出力することが
    できない。
  • エラーのあった SFL レコードは次回には必ず再読取りするような
    ロジックを自分で組み立てる必要がある。

READC を知らない開発者は、このような複雑な処理をしているはずである。
おおよそ不便を感じたら何か良い方法は用意されていないかと
疑ってみる必要がある。
IBM i にはかなりの便利な命令が用意されているので
面倒な処理を行うことがテクニックであると思わないほうがよい。

それでは次回は READC の使い方について説明する。