Rational Developer for System z
COBOL for Windows バージョン 7.5 言語解説書


WRITE ステートメント

WRITE ステートメントは、出力ファイルまたは入出力ファイルに 1 つの論理レコードを解放します。

WRITE ステートメントが実行される時には、次のようになっている必要があります。

フォーマット 1: 順次ファイル
構文図を読む構文図をスキップする>>-WRITE--レコード名-1--+-----------------+--------------------->
                        |            (1)  |  
                        '-FROM--ID-1------'  
 
>--+-+-----------------------------------------------------------+--| 句 1 |-+-->
   | |  (2)                                                      |           |  
   | '------+-BEFORE-+--+-----------+--+-+-ID-2---+--+-------+-+-'           |  
   |        '-AFTER--'  '-ADVANCING-'  | '-整数-1-'  +-LINE--+ |             |  
   |                                   |             '-LINES-' |             |  
   |                                   +-簡略名-1--------------+             |  
   |                                   '-PAGE------------------'             |  
   '-| invalid_key |--| not_invalid_key |------------------------------------'  
 
>--+-----------+-----------------------------------------------><
   '-END-WRITE-'  
 
句 1:
 
|--+-----------------------------------------------+------------>
   '-+----+--+-END-OF-PAGE-+--命令ステートメント-3-'  
     '-AT-'  '-EOP---------'                          
 
>--+----------------------------------------------------+-------|
   '-NOT--+----+--+-END-OF-PAGE-+--命令ステートメント-4-'  
          '-AT-'  '-EOP---------'                          
 
invalid_key:
 
|--+----------------------------------------+-------------------|
   '-INVALID--+-----+--命令ステートメント-1-'  
              '-KEY-'                          
 
not_invalid_key:
 
|--+--------------------------------------------+---------------|
   '-NOT INVALID--+-----+--命令ステートメント-2-'  
                  '-KEY-'                          
 

注:
  1. BEFORE、AFTER、INVALID KEY、および AT END OF PAGE の各句は、STL ファイルに対して無効です。
  2. RSD ファイルに対して、BEFORE 句および AFTER 句は無効です。

フォーマット 2: 索引付きファイルおよび相対ファイル
構文図を読む構文図をスキップする>>-WRITE--レコード名-1--+------------+-------------------------->
                        '-FROM--ID-1-'  
 
>--+----------------------------------------+------------------->
   '-INVALID--+-----+--命令ステートメント-1-'  
              '-KEY-'                          
 
>--+--------------------------------------------+--------------->
   '-NOT INVALID--+-----+--命令ステートメント-2-'  
                  '-KEY-'                          
 
>--+-----------+-----------------------------------------------><
   '-END-WRITE-'  
 

フォーマット 3: 行順次ファイル
構文図を読む構文図をスキップする>>-WRITE--レコード名-1--+------------+-------------------------->
                        '-FROM--ID-1-'  
 
>----+-----------------------------------------------------+---->
     '---AFTER----+-----------+--+-+-ID-2---+--+-------+-+-'    
                  '-ADVANCING-'  | '-整数-1-'  +-LINE--+ |      
                                 |             '-LINES-' |      
                                 '-PAGE------------------'      
 
>--+-----------+-----------------------------------------------><
   '-END-WRITE-'  
 
レコード名-1
データ部の FD 項目に定義されている必要があります。 レコード名-1 は修飾することができます。ソート・ファイルやマージ・ファイルと関連付けることはできません。

相対ファイルの場合、作成されるレコード内の文字位置数と、 置換されるレコード内の文字位置数は、異なっていても構いません。

FROM 句
FROM ID-1 を指定した WRITE ステートメントの実行結果は、 次のステートメントを指定した順序で実行した場合と同じになります。

MOVE identifier-1 TO record-name-1.
WRITE record-name-1. 

MOVE は、CORRESPONDING 句を指定していない MOVE ステートメントの規則に従って行われます。

ID-1
ID-1 は以下のいずれかを参照できます。

ID-1 は、受け取り項目としてレコード名-1 が指定された MOVE ステートメントに対して、有効な送り出し項目でなければなりません。

ID-1 およびレコード名-1 は、同じストレージ域を参照することはできません。

WRITE ステートメントの実行後も、ID-1の中の情報は使用可能です (『共通の処理機能』にあるINTO 句および FROM 句を参照。)

ID-2
これは整数データ項目である必要があります。

 

ADVANCING 句

ADVANCING 句は、ページ上での出力レコードの位置付けを制御します。

環境名 C01-C012 または S01-S05 で WRITE ADVANCING を指定すると、1 行行送りされます。

ADVANCING 句の規則

ADVANCING 句を指定する場合には、次の規則が適用されます。

  1. BEFORE ADVANCING を指定すると、ページが進む前に行が印刷されます。
  2. AFTER ADVANCING を指定すると、行が印刷される前にページが進みます。
  3. ID-2 を指定した場合、そのページは ID-2 の現行値に等しい行数だけ行送りされます。ID-2 には、基本整数データ項目を指名しなければなりません。ID-2 はウィンドウ化日付フィールドを指名することはできません。
  4. 整数を指定すると、ページは、その整数値に等しい行数だけ行送りされます。
  5. 整数または ID-2 の値は 0 とすることができます。
  6. PAGE を指定する場合、使用する句が BEFORE か AFTER かにより装置が次の論理ページに位置付けされる前に (BEFORE)、 または位置付けされた後で (AFTER)、レコードは論理ページ上に印刷されます。 PAGE が使用されている装置で意味を持たない場合、 BEFORE または AFTER (どちらの句が指定されているかに応じて) ADVANCING 1 LINE が想定されます。

    FD 項目に LINAGE 文節が含まれている場合には、 その文節で指定された次のページの最初の印刷可能行に位置変更されます。 LINAGE 文節を省略すると、位置変更は後に続く次のページの第 1 行目になります。

  7. RSD ファイルでは、BEFORE ADVANCING 句および AFTER ADVANCING 句はサポートされません。

ADVANCING 句を省略すると、 AFTER ADVANCING 1 LINE を指定した場合と同じようにして自動行送りが行われます。

LINAGE-COUNTER の規則

ファイルに対して LINAGE 文節を指定すると、WRITE ステートメントの実行中、 次の規則に従って、関連する LINAGE-COUNTER 特殊レジスターが変更されます。

  1. ADVANCING PAGE が指定されていると、LINAGE-COUNTER は 1 にリセットされます。
  2. ADVANCING ID-2 または整数 を指定している場合、LINAGE-COUNTER は、ID-2 または整数 の値だけ増やされます。
  3. ADVANCING 句を省略している場合、LINAGE-COUNTER は 1 だけ増やされます。
  4. 装置が新しいページの最初の使用可能行に再配置されると、 LINAGE-COUNTER は 1 にリセットされます。

 

 

END-OF-PAGE 句

END-OF-PAGE 句が指定されている場合、 WRITE ステートメントの実行時に印刷ページの論理的終わりに達すると、 END-OF-PAGE 命令ステートメントが実行されます。 END-OF-PAGE 句を指定する場合、このファイルの FD 項目には、LINAGE 文節がなければなりません。

印刷ページの論理的終わりは、関連する LINAGE 文節の中で指定します。

END-OF-PAGE 条件が起こるのは、 WRITE END-OF-PAGE ステートメントの実行によって、 ページ本体のフッター域内で印刷または行送りが行われるときです。これが起こるのは、LINAGE-COUNTER 特殊レジスターの値が、 LINAGE 文節の WITH FOOTING 句で指定された値に等しくなる、またはそれを超えてしまうような WRITE ステートメントが実行されたときです。 WRITE ステートメントが実行され、次いで END-OF-PAGE 命令ステートメントが実行されます。

ある WRITE ステートメント (END-OF-PAGE 句の指定の有無に関係なく) が現在のページ本体の中で最後まで実行できないとき、自動的なページ・オーバーフロー条件が起こります。これは、WRITE ステートメントが実行されると、 LINAGE-COUNTER の値が LINAGE 文節で指定されたページ本体の行数を超えてしまうときに起こります。この場合は、 装置が次の論理ページの最初の印刷可能な行 (LINAGE 文節で指定する) に位置変更される前 (BEFORE)、 または位置変更された後で (AFTER)、 行が印刷されます (前になるか後になるかは BEFORE、 AFTER のうちのどちらの句を指定するかによって異なります)。 END-OF-PAGE 句が指定されていれば、次に END-OF-PAGE 命令ステートメントが実行されます。

LINAGE 文節の WITH FOOTING 句が指定されていない場合、ページ終了条件を (ページ・オーバーフロー条件と異なるものとして) 検知することができないために、 自動的なページ・オーバーフロー条件が起こります。

WITH FOOTING 句が指定されていても、ある WRITE ステートメントを実行すると、 LINAGE-COUNTER が LINAGE 文節で指定されたフッター域の値とページ本体の値を両方とも超えてしまう場合には、 ページ終了条件と自動的なページ・オーバーフロー条件が同時に起こります。

キーワード END-OF-PAGE と EOP は同じ意味です。

単一の WRITE ステートメントには、 ADVANCING PAGE 句と END-OF-PAGE 句を両方指定できます。

INVALID KEY 句

無効なキー条件は、次の場合に起きます。

無効キー条件が起きると、以下のことが発生します。

INVALID KEY 句および利用可能な EXCEPTION/ERROR プロシージャーは、両方とも省略することができます。

 

END-WRITE 句

この明示的範囲終了符号は、WRITE ステートメントの範囲を区切るために使用されます。 END-WRITE 句を使用することによって、 条件的な WRITE ステートメントを他の条件ステートメントの中にネストすることができます。 END-WRITE 句は、命令の WRITE ステートメントと共に使用することもできます。

詳しくは、範囲区切りステートメントを参照してください。

順次ファイル用 WRITE

順次ファイルの最大レコード・サイズは、ファイルの作成時に設定され、後で変更することはできません。

WRITE ステートメントの実行後、論理レコードはレコード名-1 の中で使用することはできなくなります。ただし、次のいずれかの場合を除きます。

これらの場合には、レコード名-1 の中の論理レコードは使用可能です。

ファイル位置標識は、WRITE ステートメントの実行によって影響を受けません。

ファイル内にレコードを保管するために必要な文字位置の数は、 COBOL プログラムの中でレコードの論理記述によって定義された文字位置の数と同じであっても、同じでなくても構いません (PICTURE 文節の編集および USAGE 文節を参照)。

ファイル制御項目の中で FILE STATUS 文節を指定している場合、WRITE ステートメントが実行されると、それが正常に実行されたかどうかにかかわりなく、関連するファイル状況キーが更新されます。

WRITE ステートメントは、OUTPUT モードでオープンされた順次ファイルに対してのみ実行できます。

索引付きファイル用 WRITE

索引付きファイルに対して WRITE ステートメントを実行する場合、その前に基本レコード・キー (ファイル制御項目で定義した RECORD KEY データ項目) を必要な値に設定しておく必要があります。 RECORD KEY 値は、ファイル内で固有でなければならないことに注意してください。

ファイル制御項目の中に ALTERNATE RECORD KEY 文節も指定してある場合、 DUPLICATES 句が指定されていない限り、各代替レコード・キーも固有でなければなりません。 DUPLICATES 句が指定されている場合、代替レコード・キー値は固有である必要はありません。 この場合、システムは、後でレコードを順次にアクセスするときに、 保管したときと同じ順序で取り出すことができるようにレコードを保管します。

ファイル制御項目の中に ACCESS IS SEQUENTIAL が指定されている場合、 RECORD KEY 値の昇順にレコードを書き出さなければなりません。

ファイル制御項目の中に ACCESS IS RANDOM または ACCESS IS DYNAMIC が指定されている場合、レコードはプログラマーが指定した任意の順序で書き出すことができます。

相対ファイル用 WRITE

相対レコード OUTPUT ファイルの場合、WRITE ステートメントによって以下の操作が行われます。

I-O ファイルの場合、 ACCESS IS RANDOM または ACCESS IS DYNAMIC のいずれかを指定する必要があります。 WRITE ステートメントは新規レコードをファイルに挿入します。 WRITE ステートメントを発行する前に、 このレコードの希望する相対レコード番号を RELATIVE KEY に入れておかなければなりません。 WRITE ステートメントが実行されると、 このレコードはファイルの中の指定された相対レコード番号の位置に入れられます。


ご利用条件 | フィードバック

Copyright IBM Corporation 1996, 2008.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)