まず最初に、最後の質問の後、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 が表示されます)。
FROM
on READと同様に on WRITEINTO
は暗黙のですMOVE
。MOVE Formatted-data TO output-record および WRITE output-record とはWRITE ... FROM ...
、