WRITE 文

WRITE 文は、論理レコードを出力ファイルまたは入出力両用ファイルに書き出す。順編成ファイルでは、論理ページ内での行の垂直方向の位置指定にもこの文を使用できる。

XOPEN ADVANCING 指定内の呼び名は、標準 COBOL 定義の一部であるが、X/Open の COBOL 言語定義では明示的に除外されている。したがって、X/Open の COBOL 準拠ソース プログラムでは使用するべきではない。

書き方 1 の一般形式 (レコード順編成ファイルMF および行順編成ファイル)


*
OSVS 

書き方 2 の一般形式 (レコード順編成ファイル)


*
OSVSVSC2MF 

書き方 3 の一般形式 (レコード順編成ファイル)


*

書き方 4 の一般形式 (相対ファイルおよび索引ファイル)


*

指令およびランタイム システム スイッチ

  1. 予約語リストのフラグ設定および修正を行うコンパイラ指令に加えて、以下の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
    • WRITE-LOCK - 複数のレコード ロックを使用する際に、WRITE 文にレコード ロックを取得させる。
    • FDCLEAR - WRITE 文の後で、レコード領域の内容を予測可能にする。
  2. 以下のランタイム システム (RTS) スイッチにより、本セクションに記載されている意味が影響を受ける可能性がある。
    • N - 行順編成レコードを記述する際に、制御文字に先行する空文字の挿入を制御する。
    • T - 行順編成レコードを記述する際に、タブ文字の挿入を制御する。

すべての書き方に関する構文規則 (すべてのファイル)

  1. ANS85 identifier-1 が関数一意名である場合、英数字関数を参照するものとする。identifier-1 が関数一意名でない場合、record-name および identifier-1 は同じ記憶領域を参照できない。
  2. record-name はデータ部のファイル節内の論理レコードの名前であり、修飾してもよい。
  3. OSVSVSC2MF record-name には浮動小数点数項目を定義できる。
  4. OSVSVSC2MF identifier-1 には浮動小数点数項目を定義できる。

書き方 1 の構文規則 (レコード順編成ファイル)

  1. MF 利用者定義の呼び名を特殊名段落で関連付けた場合、TAB の代わりにその利用者定義の呼び名 (mnemonic-name) を使用できる。「特殊名段落」トピックを参照。
  2. ADVANCING 指定で identifier-2 を使用する場合、identifier-2 は基本整数データ項目の名前とする。
  3. integer、または identifier-2 が参照するデータ項目の値は、ゼロでもよい。
  4. VSC2 integer は符号付きでもよい。
  5. END-OF-PAGE を指定した場合は、関連付けたファイルのファイル記述項に LINAGE 句を指定する必要がある。
  6. 語 END-OF-PAGE および EOP は同等である。
  7. ファイル記述項に LINAGE 句を含むファイルにレコードを書き込む場合、ADVANCING mnemonic-name は指定できない。
  8. ANS85 単一の WRITE 文では、ADVANCING PAGE および END-OF-PAGE 指定を併用できない。

    MF この制限は無視してもよい。

    OSVSVSC2MF 関連付けられた mnemonic-name の代わりに、function-name 自体を使用してもよい。

OSVS 

書き方 2 の構文規則 (レコード順編成ファイル)

  1. OSVS ファイル記述項に LINAGE 句を含むファイルにレコードを書き込む場合、この書き方は指定できない。
  2. OSVS 所定のファイルにレコードを書き込むためにこの書き方の WRITE 文を使用する場合、そのファイルに使用する WRITE 文はすべてこの書き方にする。
  3. OSVS AFTER POSITIONING 指定で使用する identifier-2 は、1 文字の英数字項目として定義する。使用できる値については、一般規則 18 を参照。

書き方 4 の構文規則 (相対ファイルおよび索引ファイル)

  1. 関連付けたファイルに適用できる USE 手続きを指定しない場合は、INVALID KEY を指定する必要がある。

    OSVSVSC2MF この規則は必須ではない。

すべての書き方に関する一般規則 (すべてのファイル)

  1. FROM を指定して WRITE 文を実行した結果は、以下の実行結果と等しい。
    1. 以下の文を実行する。
       MOVE identifier-1 TO record-name

      これは、MOVE 文に指定した規則に従うものとする。

    2. FROM を指定せずに同じ WRITE 文を実行する。

    暗黙の MOVE 文を実行する前のレコード領域の内容は、この WRITE 文の実行には影響を与えない。

    WRITE 文の実行完了後に、レコード名が参照するデータを利用できなくなる場合があるが、identifier-1 が参照するデータは利用できる。一般規則 13 を参照。

  2. ファイル位置指示子は、WRITE 文の実行の影響を受けない。
  3. WRITE 文を実行すると、その対象のファイルに関連付けた FILE STATUS データ項目 (ある場合) の値が更新される。「手続き部」の章の「入出力状態」のトピックを参照。
  4. ファイルのレコードの最大サイズは、ファイルの作成時に決まる。このサイズは後で変更できない。
  5. ファイル内の論理レコードを格納する大容量記憶装置上の文字位置の数は、そのレコードの論理記述で定義した文字位置の数と等しくても異なっていてもよい。
  6. WRITE 文を実行すると、論理レコードがオペレーティング システムに書き出される。
  7. ANS85 WRITE 文の実行が失敗すると、record-name に関連付けたファイルの入出力状態が更新される。次に、そのファイルに適用できる USE AFTER EXCEPTION 手続きが指定されていればその手続きが実行され、その後で USE 文の規則に従って制御が移る。「USE 文」トピックを参照。

書き方 1 の一般規則 (レコード順編成ファイル)

  1. MF TAB に関連付けた呼び名を指定した場合、用紙の標準の垂直タブ位置へと移動する。
  2. END-OF-PAGE を指定した WRITE 文の実行中に印刷ページ表現の論理末尾に達すると、END-OF-PAGE で指定した無条件文が実行される。論理末尾は、レコード名に関連付けた LINAGE 句で指定する。
  3. 所定の WRITE 文を実行した結果、LINAGE-COUNTER が、LINAGE 句 (指定した場合) の integer-2 または data-name-2 が参照するデータ項目で定義した値以上になると、END-OF-PAGE を指定した WRITE 文の実行時にページ終了条件が発生する。この場合、WRITE 文の実行後に、END-OF-PAGE 指定内の無条件文が実行される。

    WRITE 文 (END-OF-PAGE 指定の有無にかかわらず) の実行結果が現在のページ本体に収まりきらない場合は、自動的にページあふれ条件が発生する。

    ページあふれ条件は、WRITE 文の実行時に、LINAGE 句の integer-1 に指定した値または data-name-1 が参照するデータ項目の値を LINAGE-COUNTER が超えた場合に発生する。この場合、レコードが論理ページに表示される前または後 (BEFORE または AFTER のどちらを指定したかに応じて異なる) に、LINAGE 句で指定した次の論理ページに書き込める最初の行に装置が再度位置指定される。END-OF-PAGE 句で無条件文を指定した場合、レコードの書き込みおよび装置の再度位置指定を行った後に、その無条件文が実行される。

    LINAGE 句で integer-2 または data-name-2 を指定しない場合、ページあふれ条件とは別にページ終了条件が発生することはない。この場合、ページ終了条件およびページあふれ条件は同時に発生する。

    LINAGE 句で integer-2 または data-name-2 を指定したが、WRITE 文を実行した結果、integer-2 の値または data-name-2 が参照するデータ項目、および integer-1 の値または data-name-1 が参照するデータ項目の両方を、LINAGE-COUNTER が同時に超える場合は、integer-2 または data-name-2 は指定されていない場合と同様に処理が進む。

MF 

書き方 1 の一般規則 (行順編成ファイル)

  1. MF ADVANCING を指定しない場合、使用しているオペレーティング システムのテキスト エディターの方式に従って、自動的に 1 行が行送りされる (通常は BEFORE ADVANCING 1 LINE を指定した場合と同様の処理になる)。
  2. MF MF 順編成ファイルの外部で定義された境界を超えて書き込もうとすると、例外条件が発生する。この場合、レコード領域の内容は影響を受けない。以下の例外処理が行われる。
    1. 関連付けたファイルの FILE STATUS データ項目の値 (ある場合) が、境界違反を示す値に設定される。「手続き部」の章の「入出力状態」のトピックを参照。
    2. 対象ファイルに USE AFTER STANDARD EXCEPTION 宣言を明示的または暗黙的に指定した場合、その宣言手続きが実行される。
    3. 対象ファイルに USE AFTER STANDARD EXCEPTION 宣言を明示的にも暗黙的にも指定しない場合、結果は未定義となる。
  3. MF MF 複数の物理リール/ユニットに含まれる出力ファイルのリール/ユニット末尾を検出すると、WRITE 文は以下の操作を行う。
    1. 標準のリール/ユニット終了手続き
    2. リール/ユニットの交換手続き
    3. 標準のリール/ユニット開始ラベル手続き
  4. XOPEN ファイル内のレコードが固定長である場合、レコード領域全体がファイルに書き込まれる。レコード領域をさまざまなサイズのレコードで再定義する場合、最大サイズよりも短いレコードは、無意味なデータを含まないように空白で埋める必要がある。
  5. ANS85 NOT END-OF-PAGE を指定した WRITE 文の実行が正常に進み、その間にページ終了条件が発生しなければ、入出力処理の実行後に制御が imperative-statement-2 に移る。
MF 

書き方 1 の一般規則 (レコード順編成ファイルおよび行順編成ファイル)

  1. ADVANCING 指定および END-OF-PAGE 指定は、ともに印刷ページ表現の各行の縦方向の位置を制御する。

    ADVANCING を指定しない場合、リスト装置 (PRINTER または PRINTER-1) に出力した際に、AFTER ADVANCING 1 LINE を指定した場合と同様に自動的に行送りされる。ADVANCING を指定した場合、以下のとおり行送りされる。

    1. identifier-2 を指定した場合、identifier-2 に関連付けた現在の値に等しい行数だけ、印刷ページ表現上で行送りされる。
    2. integer を指定した場合、その値に等しい行数だけ、印刷ページ表現上で行送りされる。
    3. mnemonic-name を指定した場合、「特殊名段落」トピックに記載のとおり、印刷ページ表現上で行送りされる。
    4. BEFORE を指定した場合、印刷ページ表現上で行送りされる前に、上記の a、b、および c の規則に従って、該当する行が出力される。
    5. AFTER を指定した場合、印刷ページ表現上で行送りした後、上記の a、b、および c の規則に従って、該当する行が出力される。
    6. PAGE を指定した場合、装置が次の論理ページに再配置される前または後 (BEFORE または AFTER のどちらを指定したかに応じて異なる) に、レコードが論理ページに出力される。書き込み対象のレコードをファイル記述項に LINAGE 句を含むレコード順編成ファイルに関連付けた場合、LINAGE 句で指定したとおり、装置は次の論理ページに書き込み可能な最初の行に再配置される。
  2. 単一の WRITE 文では、ADVANCING PAGE および END-OF-PAGE 指定を併用できない。

書き方 1、2、および 3 の一般規則 (順編成ファイル)

  1. WRITE 文の実行時には、関連付けたファイルを出力 (OUTPUT) モードまたは拡張 (EXTEND) モードで開く。「OPEN 文」トピックを参照。
  2. WRITE 文を実行すると、レコード領域内の論理レコードは解放されて利用できなくなる。ただし、関連付けたファイルを SAME RECORD AREA 句で指定した場合、または境界違反により WRITE 文の実行が失敗した場合は、論理レコードを利用できる。

    論理レコードは、関連付けた出力ファイルとして、およびレコード名に関連付けたファイルとして SAME RECORD AREA 句で参照する他のファイルのレコードとしても利用できる。

OSVS 

書き方 2 の一般規則 (レコード順編成ファイル)

  1. OSVS WRITE 文で AFTER POSITIONING を指定すると、システムはレコードの先頭の文字位置に適切な文字を転記してから、レコードをファイルに書き込む。そのため、この先頭の文字位置は空けておくこと。identifier-2 オプションを使用する場合、identifier-2 が保持する以下のいずれかの値が出力レコードに転記される。
    identifier-2 意味
    (空白) 1 行改行
    0 2 行改行
    - 3 行改行
    + 改行なし
    1 から 9 それぞれチャネル 1 から 9 に移動
    A、B、C それぞれチャネル 10、11、12 に移動
    V、W ポケット 1 または 2 を選択

    integer-1 オプションを使用する場合、出力レコードに配置される文字は以下のとおり決定される。

    integer 出力文字 意味
    0 1 チャネル 1 に移動
    1 (空白) 1 行改行
    2 0 2 行改行
    3 - 3 行改行
  2. OSVS END-OF-PAGE (指定した場合) は注記になる。
OSVSVSC2MF 

書き方 3 の一般規則 (レコード順編成ファイル)

  1. OSVSVSC2MF 順編成ファイルの外部定義境界を超えて書き込もうとすると、無効キー (INVALID KEY) 条件が発生する。無効キー条件が発生すると、WRITE 文の実行は失敗する。その際、レコード領域の内容は影響を受けない。関連付けたファイルの FILE STATUS データ項目 (ある場合) は、その条件の原因を示す値に設定される。実行は、無効キー条件で規定された規則に従って続行される (「手続き部」の章の「入出力状態」セクションを参照)。

書き方 4 の一般規則 (相対ファイルおよび索引ファイル)

  1. この文の実行時には、関連付けたファイルを、OUTPUT (出力)、I-O (入出力両用)、または EXTEND (拡張) モードで開く。索引ファイルを順呼び出し法で処理する場合は、I-O モードで開くことはできない。「ファイル管理記述項」トピックおよび「OPEN 文」トピックを参照。
  2. WRITE 文の実行によって解放された論理レコードをレコード領域内で利用できるのは、関連付けたファイルを SAME RECORD AREA 句で指定した場合、または無効キー条件により WRITE 文の実行が失敗した場合のみである。

    論理レコードは、関連付けた出力ファイルとして、およびレコード名に関連付けたファイルとして同じ SAME RECORD AREA 句で参照する他のファイルのレコードとしても利用できる。

  3. 無効キー条件の発生が検知されると、WRITE 文の実行は失敗する。その際、レコード領域の内容は影響を受けない。関連付けたファイルの FILE STATUS データ項目 (ある場合) は、その条件の原因を示す値に設定される。実行は、無効キー条件で規定された規則に従って続行される (「手続き部」の章の「入出力状態」セクションを参照)。

書き方 4 の一般規則 (相対ファイル)

  1. ファイルを出力モードで開いた場合、WRITE 文は以下のとおり処理を進める。
    1. 順呼び出し法の場合、WRITE 文はオペレーティング システムにレコードを書き出す。最初のレコードの相対レコード番号を 1 とし、後続のレコードの番号は 2、3、4、... と 1 つずつ繰り上がる。関連付けたファイルのファイル管理記述項に RELATIVE KEY データ項目を指定した場合、WRITE 文の実行中に書き出されたレコードの相対レコード番号がオペレーティング システムによって RELATIVE KEY データ項目に収められる。
    2. 乱呼び出し法または動的呼び出し法の場合、WRITE 文の実行に先行して、実行時要素で RELATIVE KEY データ項目の値を相対レコード番号で初期化する。つまり、レコード領域内のレコードを RELATIVE KEY データ項目に関係付けておく。その後で WRITE 文を実行すると、そのレコードがオペレーティング システムに書き出される。
  2. ファイルを入出力両用モードで開き、乱呼び出し法または動的呼び出し法で処理する場合、RELATIVE KEY データ項目の値は、実行時要素によって相対レコード番号で初期化し、レコード領域中のレコードと関連付ける。その後で WRITE 文を実行すると、レコード領域の内容がオペレーティング システムに書き出される。
  3. 以下の場合は、無効キー条件が発生する。
    1. 乱呼び出し法または動的呼び出し法で処理しており、RELATIVE KEY データ項目が指定するレコードがファイル内ですでに存在している場合。
    2. ファイルの外部定義境界を超えて書き込もうとした場合。

書き方 4 の一般規則 (索引ファイル)

  1. WRITE 文を実行すると、レコード領域の内容が書き込まれる。オペレーティング システムはレコード キーの内容を使用して、以降どのレコード キーを使用してもレコードを呼び出せるようにする。
  2. 主レコード キーの値は、ファイル内の全レコード間で一意とする。
  3. 主レコード キーに指定したデータ項目は、WRITE 文の実行に先立ち、実行時要素によって任意の値に設定しておく。
  4. ファイルに対して順呼び出し法を指定した場合、主レコード キーの値の昇順でレコードをオペレーティング システムに書き込むものとする。
  5. 乱呼び出し法または動的呼び出し法を指定した場合、プログラム指定の順番でレコードをオペレーティング システムに書き込める。
  6. 索引ファイルのファイル管理記述項に ALTERNATE RECORD KEY 句を指定した場合、副レコード キーの値は、そのレコード キー データ項目に DUPLICATES を指定した場合にのみ一意でなくともよい。この場合、オペレーティング システムは、複数のレコードを連続で呼び出す際に、重複した副レコード キーを持つレコードがオペレーティング システムに書き出された順番で取得されるように、レコードの記憶域を提供する。
  7. 以下の場合は、無効キー条件が発生する。
    1. 出力モードで開いたファイルに順呼び出し法を指定し、主レコード キーの値が、直前のレコードの主レコード キーの値以下である場合。
    2. 出力モードまたは入出力両用モードでファイルを開き、主レコード キーの値が、ファイル内にすでに存在している別のレコードの主レコード キーの値と等しい場合。
    3. 出力モードまたは入出力両用モードでファイルを開き、キーの重複が許可されていない副レコード キーの値が、ファイル内にすでに存在している別のレコードの対応するデータ項目と等しい場合。
    4. ファイルの外部定義境界を超えて書き込もうとした場合。
  8. ANS85 WRITE 文の実行の成功または失敗後の制御の移行は、INVALID KEY 指定および NOT INVALID KEY 指定の有無に依存する。「INVALID KEY 条件」トピックを参照。