RPG

505. %LOOKUP の開始位置を指定するには

フリー・フォーマットになって
LOOKUP命令は %LOOKUP , %LOOKUPGE, ,,,など多様になると同時に
記述が大変楽になった。
_

固定式フォーマットでの ILERPGの LOOKUPでは

            Z-ADD 1         N   
  CODE      LOOKUP CDR(N)                 50
            IF     *IN50 = *ON
             :
            ENDIF

のように記述しており特に

            Z-ADD 1          N

をいちいち記述することが面倒であった。
ほとんどが指標N は 1から検索するのが普通なので
いちいち

            Z-ADD 1          N

という行は本当に無駄のようであった。
フリー・フォーマットでは

 /FREE
  :
  N = %LOOKUP(CODE: CDR);
  :
 /END-FREE

のようにして Z-ADD 1 N
の無駄な記述は必要なくなった。
しかし探索かる配列に複数の同じコードが存在する場合
始発の N を指定する必要がある場合が出てくる。

 /FREE
  :
      STRIDX = 1;
      DOW ON;
      N = %LOOKUP(CODE: CDR: STRIDX);
      IF ...
        STRIDX = N + 1;
      ENDIF;
      ENDDO;
  :
 /END-FREE

のようにして %LOOKUPの後続に探索を開始する位置の指標を
STRIDX で明示的に指定することがせできる。
_