アプリ版:「スタンプのみでお礼する」機能のリリースについて

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)


どなたかよろしくお願いします。

A 回答 (4件)

>実行時に「OUTSIDE THE REGION OF THE TABLE.」というようなエラーが出力されてしまいました。



「テーブルの範囲外」を参照しているというエラーのようですから、添字に 1~100以外の値が入っている可能性が大です。

一般的には、以下の部分の再確認となります。
1. 添字の設定前にテーブルを参照、操作していないか。
2. テーブルの上限を超えた場合を考慮しているか。
3. テーブルの上限を超えた場合の処理に誤りはないか。

また、見落としがちなミスとしては、添字の有効桁数不足(今回の場合だと添字を 9(2)で定義していて、99+1で 0になっていた)等もあります。

なお、単純な増減であれば、指標でSET命令(UP BY、DOWN BY)でも可能ですし、今回のように1つの添字(指標)で参照するデータが多いテーブルだと指標を利用する方が処理効率がいい可能性もあります。(コンパイラ次第だとは思いますが)
    • good
    • 0

まぁ単純にIDX1が0または100より大きいということでしょう。

    • good
    • 1

>その後メインの処理の部分で「COMPUTE」によって「+1」してから、


>今回質問した処理に突入しています。
>過去に同じようなプログラムを作成した時は、
>添え字ではなくて、指標(INDEXED BY~)を使用しましたが、
>その時は問題なくできています。
>ですが今回は添え字の値を「COMPUTE」によって変化させる事で、
>TABLEの処理を制御したいため、
>うまくいかず困っている次第です。

INDEXED BYで定義しSETを使っていたものを、変数宣言しCOMPUTEでカウントアップするように変えた訳ではないのですよね?
処理内容の具体的な提示がなければ、誰も具体的にアドバイスできませんよ?

問題になっているのは、SEARCH命令中の処理だったりするのでしょうかね?
    • good
    • 0

私の使っていたCOBOLでは、配列にVALUEで初期値を設定できなかったのですが、お使いのCOBOLではできるのですかね?



>実行時に「OUTSIDE THE REGION OF THE TABLE.」というようなエラーが出力されてしまいました。
>MOVE I TO C(IDX1)

IDX1は、どのように宣言しているのですかね?
初期値が入っていないとか、1~100以外の値が入っているのでは?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
本当に助かります。

配列にVALUE句の初期値設定は、
以前に作成したプログラムで稼動確認できていますので、
問題ないと思います。

「IDX1」の定義は以下の通りです。
01 IDX1 PIC 9(03) VALUE ZERO.

その後メインの処理の部分で「COMPUTE」によって「+1」してから、
今回質問した処理に突入しています。

過去に同じようなプログラムを作成した時は、
添え字ではなくて、指標(INDEXED BY~)を使用しましたが、
その時は問題なくできています。

ですが今回は添え字の値を「COMPUTE」によって変化させる事で、
TABLEの処理を制御したいため、
うまくいかず困っている次第です。

何かご存知でしたらお願いいたします。

お礼日時:2010/02/03 18:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています