WRITE (新しいレコードの作成)

自由形式構文 WRITE{(E) } 名前 {データ構造 }
コード 演算項目 1 演算項目 2 結果フィールド 標識
WRITE (E)   名前 (ファイルまたはレコード様式) データ構造 _ ER EOF

WRITE 命令は新しいレコードをファイルに書き出します。

名前オペランドは、プログラム記述ファイルの名前か、または外部記述ファイルから取得されるレコード様式の名前でなければなりません。

変更の始まりデータ構造オペランドが指定されている場合、レコードはデータ構造から直接ファイルに書き出されます。 名前が プログラム記述ファイルを参照している場合、データ構造は、 宣言されたファイルのレコード長と同じ長さのデータ構造である 必要があります。名前 が外部記述ファイルのレコード様式を参照する場合、データ構造はタイプ EXTNAME(...:*OUTPUT or *ALL) または LIKEREC(...:*OUTPUT or *ALL) で定義されているデータ構造にする必要があります。 DISK ファイルでは、データ構造が LIKEREC で定義され、フィールドのタイプが指定されない場合、出力バッファー・レイアウトが入力バッファー・レイアウトと完全に一致すれば、そのデータ構造を WRITE 命令に使用できます。 例については、図 2を参照してください。 データ構造の定義方法、およびファイルとデータ構造の間でどのようにデータが転送されるかについては、ファイル命令を参照してください。変更の終わり

WRITE 例外 (ファイル状況コードが 1000 より大きい) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 オーバーフローが外部記述印刷ファイルに達して、 ファイル仕様書にオーバーフロー標識が指定されていない場合には、エラーが発生します。 エラー処理の詳細については、ファイル例外/エラーを 参照してください。

75-76 桁目に、WRITE 命令でファイルの終わりになった (サブファイルがいっぱいに なった) かどうかを知らせる標識を指定することができます。 この標識は WRITE 命令 が実行されるたびにオン (EOF 条件) またはオフに設定されます。この情報は %EOF 組み込み関数からも入手することができます。この関数 は、EOF 条件が発生した場合に '1' を戻します。それ以外の場合には '0' を戻します。

WRITE 命令を使用する場合には、次のことに留意してください。
  • 名前 がレコード様式名の場合、レコード定義の中のすべてのフィールドのプログラムにおける現行値を使用して、レコードが構成されます。
  • 相対レコード番号を使用するレコードがファイルに書き出される場合には、 RECNO ファイル仕様書キーワード (相対レコード番号) で指定されたフィールド 名を、書き出されるレコードの相対レコード番号が入るように更新しなければ なりません。
  • 変更の始まり入力可能または更新可能な DISK ファイル (自由形式ファイル定義の USAGE キーワード または固定形式ファイル定義の 17 桁目を参照) にレコードを追加するために WRITE 命令 を使用する場合、そのファイルが出力可能 (自由形式定義の USAGE キーワードに *OUTPUT を指定するか、 または、ファイル記述仕様書の 20 桁目に A を指定します) でもあるように定義する 必要があります。 変更の終わり
  • 装置従属の機能は制限されます。 例えば、"PRINTER" 装置に "WRITE" が出されると、ファイル仕様書にキーワード PRTCTL が指定されていないと (通常は、行送りやスキップ情報は出力仕様の 41-51 桁目に指定される)、 印刷後スペースは 1 に設定されます。 ファイルが外部記述の場合には、これらの機能は外部記述の一部です。
  • 複数装置ファイルの場合には、データはファイル仕様書の DEVID キーワードで 指定されたフィールド名に指定されたプログラム装置 に書き出されます (DEVID(フィールド名)を参照してください。) DEVID キーワードが指定されていない場合には、データは、最後の正常な入力 操作が処理されたプログラム装置に書き出されます。

ヌル値を含むヌル値可能フィールドを持つレコードの追加について は、データベースのヌル値サポートを参照してください。

詳細については、ファイル命令を参照してください。

図 1. プログラム記述ファイルを使用した WRITE 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 *  The WRITE operation writes the fields in the data structure
 *  DS1 to the file, FILE1.
 *
C                   WRITE     FILE1         DS1
変更の始まり
図 2. LIKEREC データ構造を含む DISK ファイルに対する WRITE 命令
    dcl-f FILE1 DISK USAGE(*OUTPUT);

    dcl-ds likerec_default LIKEREC(FMT1);
    dcl-ds likerec_output LIKEREC(FMT1 : *OUTPUT);
    dcl-ds likerec_all LIKEREC(FMT1 : *ALL);

    WRITE FMT1 likerec_default;
    WRITE FMT1 likerec_output;
    WRITE FMT1 likerec_all;
変更の終わり