質問: cobol occursで指定したデータの参照の仕方 ibm cobol でプログラムを作成しています。 初歩的な質問で恥ずかしいのですが、どなたか教えていただけますか。 まず、以下のようなtableを定義しました。 01 a-table. 03 b occurs 100. 05 c pic x(08) value space. 05 d pic x(02) value space. 05 e pic x(08) value space. 05 f pic x(05) value space. 05 g pic x(05) value space. 05 h pic x(05) value space. その後に、inputファイルからreadしたデータのうち、必要な部分だけを 該当のtableに添え字を使用して代入していく処理を作成したいと思っています。 その場合に、上記の「c」~「h」に代入するにはどうすればよいでしょうか? また後続の処理で直接その値を参照したいのですが、どうすれば良いでしょうか? 私の考えられる範囲で以下のようにプログラムしましたが、 実行時に「outside the region of the table.」というようなエラーが出力されてしまいました。 move i to c(idx1) move j to d(idx1) move k to e(idx1) move l to f(idx1) move m to g(idx1) move n to h(idx1) どなたかよろしくお願いします。
回答: >実行時に「outside the region of the table.」というようなエラーが出力されてしまいました。 「テーブルの範囲外」を参照しているというエラーのようですから、添字に 1~100以外の値が入っている可能性が大です。 一般的には、以下の部分の再確認となります。 1. 添字の設定前にテーブルを参照、操作していないか。 2. テーブルの上限を超えた場合を考慮しているか。 3. テーブルの上限を超えた場合の処理に誤りはないか。 また、見落としがちなミスとしては、添字の有効桁数不足(今回の場合だと添字を 9(2)で定義していて、99+1で 0になっていた)等もあります。 なお、単純な増減であれば、指標でset命令(up by、down by)でも可能ですし、今回のように1つの添字(指標)で参照するデータが多いテーブルだと指標を利用する方が処理効率がいい可能性もあります。(コンパイラ次第だとは思いますが)