1

Cobol に 2 次元配列があり、各行を出力ファイルに書き込みたいと考えています。これを行うには、次のコードを記述します。

FILE-SECTION.
01 FILE-TABLE.
   05 FILE-TABLE-ROW OCCURS 10 TIMES INDEXED BY I.
      10 FILE-TABLE-COL PIC X(1) OCCURS 10 TIMES INDEXED BY J.

SET I TO 1.
PAR-A.
IF I <= 10 THEN
   WRITE FILE-TABLE-ROW(I)
   SET I UP BY 1
   GO TO PAR-A
END-IF.

驚いたことに、コンパイラは WRITE FILE-TABLE-ROW(I) LINE で「FILE-TABLE-ROW needs one subscript」というエラーを報告します。これがエラーになる理由がわかりません。

4

1 に答える 1

2

まず最初に、最後の質問の後、OCCURS との契約テーブルに移動したことがわかります。これは間違ったことだと思います。これの方が良い。

   01  FILE-TABLE.
      05  FILE-TABLE-ROW 
          OCCURS 10 TIMES 
          INDEXED BY I.
          10  FILE-TABLE-COL 
              OCCURS 10 TIMES 
              INDEXED BY J.
              15  FILE-TABLE-COL           PIC X(1).

前に触れなかった点ですが、初心者を支援するために名前を付けている可能性があるため、使用しない場合はフィールドに名前を付ける必要はありません。

   01  FILE-TABLE.
      05  FILE-TABLE-ROW 
          OCCURS 10 TIMES 
          INDEXED BY I.
          10  FILLER 
              OCCURS 10 TIMES 
              INDEXED BY J.
              15  FILE-TABLE-COL           PIC X(1).

1985 年の規格以降、FILLER という単語は目に見えないインクで書くことができることに注意してください。

    05  FILLER                             PIC X(20).
    05                                     PIC X(20).

名前の空白は暗黙の FILLER です。また、ゼロで始まるすべてのレベル番号と05同様に、 のように記述できることにも注意してください。5

古いことわざにあるように、ファイルを読み取り、記録を書き込みます。このコンテキストでの「レコード」は、DF の下の 01 レベルです。レコードの下位部分である何かを書き込もうとしていますが、うまくいきません。コンパイラを混乱させたようです。

FDは見えませんが、そこにあると思います。テーブルを WORKING-STORAGE (または LOCAL-STORAGE) に配置します。FD の下に 10 バイトのレコードを定義するか、MOVE FILE-TABLE-ROW をその新しく定義されたレコードに移動するか、WRITE FROM FILE-TABLE-ROW を使用します。

FILE SECTION にレコードの一部 (01 レベル) を書き込むことはできません。MOVE または WRITE ... FROM... を使用して非 01 レベルのデータにアクセスし、そのデータを 01 レベルに取得して WRITE を許可することができます。

WORKING-STORAGE SECTION,
01  some-thing PIC X.

それで

MOVE some-thing TO output-record
WRITE output-record

または

WRITE output-record FROM some-thing

WRITE興味のあることをここに書く方法は 2 つあります。

WRITE record-name
WRITE record-name FROM somewhere-else

最初に、FD の下で出力を完全に定義し、必要なフィールドに値を入力してから、レコードを書き込みます。

2 つ目は、FD の下に最小限の定義が必要なだけで (レコードの長さを定義するのに十分で、可変にすることができます。おそらく後で説明します)、必要なすべてのフィールドに値を入れます。必要に応じて別のグループ アイテム。FD の下の定義は完全である可能性がありますが、完全である必要はありません。

そのデータは、DATA DIVISION のどこからでも取得できます。FILE SECTION の別の場所からの場合もあります (WRITE output-record FROM input-record が表示されます)。

FROMon READと同様に on WRITEINTOは暗黙のですMOVE。MOVE Formatted-data TO output-record および WRITE output-record とはWRITE ... FROM ...

于 2016-01-18T08:14:35.490 に答える