0

私はCOBOL(およびOpenCOBOL)を初めて使用します。私の質問は、OpenCOBOLの「complex-odo」(OCCURS ... DEPENDING ON)についてです。

次のコードで 1.0 を使用しました

……

01  W-PTDO-PROC-TBL.
       05  W-PTDO-PROC-ENTRY OCCURS 0 TO 450 TIMES
             DEPENDING ON W-PTDO-PROC-MAX
             INDEXED BY W-PTDO-PROC-INDX.
           10 W-PTDO-PROC-APC        PIC X(05).
           10 W-PTDO-PROC-LNSUB      PIC S9(07)   COMP-3.
           10 W-PTDO-PROC-KEY.
               15 W-PTDO-PROC-WA-OFFSET  PIC 9(08)V99.
               15 W-PTDO-PROC-UNITS      PIC 9(09).
           10 W-PTDO-PROC-DEVICE-CNT PIC 9(03).
           10 W-PTDO-PROC-DARRAY OCCURS 0 TO 450 TIMES
                DEPENDING ON W-PTDO-DARRAY-MAX
                INDEXED BY W-PTDO-DARRAY-INDX.
               15  W-PTDO-PROC-DHCPCS PIC X(05).
           10 W-PTDO-DARRAY-SIZE     PIC 9(03).
           10 W-PTDO-PROC-TOT-DCHRGS PIC 9(10)V99.
           10 W-PTDO-PROC-TOT-DUNITS PIC 9(05).
           10 W-PTDO-PROC-USED       PIC X(01).

……

cobc は次のエラー メッセージを返します。

エラー: 'W-PTDO-PROC-DARRAY' のため、'W-PTDO-PROC-ENTRY' に OCCURS 句を含めることはできません

上記のエラー メッセージは、このコメントを見つけた field.c から発行されます。

この「複雑な方法」を OpenCOBOL にサポートさせる方法はありますか?

「OCCURS DEPENDING」が上位レベルの「OCCURS」句の下にネストされた上記のコード スニペットは、IBM の COBOL プログラミング ガイドの付録によると、明確に定義された「complex-odo」のようです。

ありがとうございました、

ビリー・ロン

4

1 に答える 1

2

別の配列内に可変長配列 (OCCURS DEPENDING ON) を含めることはできません!

必要な処理が複雑すぎます。内側の配列項目の長さを変更できる場合、外側の配列の N 番目のエントリの開始を計算する唯一の方法は、1 から N までの各内側メンバーに順番にアクセスし、DEPENDING ON カウントを使用してその長さを計算することです。長さ、したがって次の配列エントリの開始。

于 2011-03-14T06:12:58.523 に答える