- ベストアンサー
COBOL OCCURSで指定したデータの参照の仕方
- IBM COBOLでプログラムを作成しています。COBOL OCCURSを使用してデータの参照方法について教えてください。
- 質問者はA-TABLEというTABLEを定義し、その中のCからHにデータを代入したいと考えていますが、エラーが出ています。
- どのようにプログラムを修正すれば正しくデータを代入し参照することができるでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>実行時に「OUTSIDE THE REGION OF THE TABLE.」というようなエラーが出力されてしまいました。 「テーブルの範囲外」を参照しているというエラーのようですから、添字に 1~100以外の値が入っている可能性が大です。 一般的には、以下の部分の再確認となります。 1. 添字の設定前にテーブルを参照、操作していないか。 2. テーブルの上限を超えた場合を考慮しているか。 3. テーブルの上限を超えた場合の処理に誤りはないか。 また、見落としがちなミスとしては、添字の有効桁数不足(今回の場合だと添字を 9(2)で定義していて、99+1で 0になっていた)等もあります。 なお、単純な増減であれば、指標でSET命令(UP BY、DOWN BY)でも可能ですし、今回のように1つの添字(指標)で参照するデータが多いテーブルだと指標を利用する方が処理効率がいい可能性もあります。(コンパイラ次第だとは思いますが)
その他の回答 (3)
- rivoisu
- ベストアンサー率36% (97/264)
まぁ単純にIDX1が0または100より大きいということでしょう。
- chukenkenkou
- ベストアンサー率43% (833/1926)
>その後メインの処理の部分で「COMPUTE」によって「+1」してから、 >今回質問した処理に突入しています。 >過去に同じようなプログラムを作成した時は、 >添え字ではなくて、指標(INDEXED BY~)を使用しましたが、 >その時は問題なくできています。 >ですが今回は添え字の値を「COMPUTE」によって変化させる事で、 >TABLEの処理を制御したいため、 >うまくいかず困っている次第です。 INDEXED BYで定義しSETを使っていたものを、変数宣言しCOMPUTEでカウントアップするように変えた訳ではないのですよね? 処理内容の具体的な提示がなければ、誰も具体的にアドバイスできませんよ? 問題になっているのは、SEARCH命令中の処理だったりするのでしょうかね?
- chukenkenkou
- ベストアンサー率43% (833/1926)
私の使っていたCOBOLでは、配列にVALUEで初期値を設定できなかったのですが、お使いのCOBOLではできるのですかね? >実行時に「OUTSIDE THE REGION OF THE TABLE.」というようなエラーが出力されてしまいました。 >MOVE I TO C(IDX1) IDX1は、どのように宣言しているのですかね? 初期値が入っていないとか、1~100以外の値が入っているのでは?
お礼
ご回答ありがとうございます。 本当に助かります。 配列にVALUE句の初期値設定は、 以前に作成したプログラムで稼動確認できていますので、 問題ないと思います。 「IDX1」の定義は以下の通りです。 01 IDX1 PIC 9(03) VALUE ZERO. その後メインの処理の部分で「COMPUTE」によって「+1」してから、 今回質問した処理に突入しています。 過去に同じようなプログラムを作成した時は、 添え字ではなくて、指標(INDEXED BY~)を使用しましたが、 その時は問題なくできています。 ですが今回は添え字の値を「COMPUTE」によって変化させる事で、 TABLEの処理を制御したいため、 うまくいかず困っている次第です。 何かご存知でしたらお願いいたします。