RPG

213. 配列指標のエラーを出さないようにするには ?

RPG プログラムの実行時においてよく目にするエラーのひとつが
配列指標の誤りである。

これは配列指標が 0 またはマイナスか、または定義済みの配列指標数をオーバーしたときの
実行時エラーとして現れる。

■ 配列指標のエラーが発生したときは

1. WRKACTJOB のプログラム実行スタックを調べて
該当エラー・プログラムのどのステートメントでエラーで停止しているのかを調べる。

2. RPG ソースを調べてエラーとなった場所で使われている配列指標の変数を調べる。

3. エラー・メッセージに対する応答は C (=Cancel) で応えるのではなく D (=Dump) で
応答すると QEZJOBLOG にプログラムのメモリ・ダンプが出力されるので、OUTQ : QEZDEBUG
印刷スプール : QPPGMDMP の中の配列指標の値を調べると配列指標が異常値になっていることが
わかるはずである。

@配列指標の値が 0 であればプログラムの論理ミス、つまり指標を設定せずに、その配列を
使用しようとしている、と疑われる。

A指標の値がマイナスであれば、これもプログラムの論理ミスであり、複雑な論理を使用しているために
ミスが発生していると推測される。

前述の2つの場合はプログラムをデバッグして考慮範囲の漏れを考慮してプログラムに論理を追加して
再コンパイルの上、再実行する必要がある。

B配列指標が定義された配列の数をオーバーしているようであれば、プログラム設定当初の予想を超えた
データが読み込まれたために発生しているものと予想される。
この場合はプログラムの配列の数を拡張して再コンパイルして再実行することによってエラーを回復する
ことができる。

■ 配列指標のエラーを出さないようにするには

ここでは配列指標のエラーをモニターして事前に監視できるようなロジックの作り方を紹介する。
それには組込み関数 %ELEM を使用する。

配列数 = %ELEM(配列)

であり、%ELEM によって定義済みの配列要素の数を取得することができる。

例えば、

   D AR              S              1    DIM(512)

   C                   IF        K >= %ELEM(AR)
   C                   LEAVE                   
   C                   END               

のようにすれば、フィールド K の値が %LEN(AR) すなわち 512 以上であれば
LEAVE が実行される。

このようにして %ELEM を使えば配列指標がオーバーしそうであれば事前に
プログラムの中で %ELEM によって警告メッセージを出すようにしておくこともできる。