1. WRITE

WRITEステートメントは、出力ファイルにレコードを書き込みます。

順次ファイルは、OUTPUTまたはEXTENDモードでオープンしている必要があります。

指標ファイルまたは相対ファイルは、OUTPUT、I-O、またはEXTENDモードでオープンしている必要があります。

  • 形式1

    figure pd write format1 sequential files
    Figure 1. WRITEステートメントの形式1
    figure pd write format1 phrase1
    Figure 2. WRITEステートメントの形式1 : 句
    figure pd write format1 invalid key
    Figure 3. WRITEステートメントの形式1 : invalid_key
    figure pd write format1 not invalid key
    Figure 4. WRITEステートメントの形式1 : not_invalid_key
  • 形式2

    figure pd write format2 indexed and relative files
    Figure 5. WRITEステートメントの形式2
  • 形式3

    figure pd write format3 line sequential files
    Figure 6. WRITEステートメントの形式3

以下は、ステートメントの各設定項目についての説明です。

  • record-name-1

    • データ部のFD項目に記述されている必要があります。

    • record-name-1は、修飾することができます。ソート・ファイルとマージ・ファイルと関連付けることはできません。

  • FROM句

    • FROM句のWRITEステートメントの実行結果は、以下の2つのステートメントを実行​​した場合と同じです。

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

    • identifier-1は、以下のいずれかを参照します。

      • WORKING-STORAGE SECTION、LOCAL-STORAGE SECTION、またはLINKAGE SECTIONのデータ項目

      • すでにオープンされた別のファイルのレコード記述

      • 英数字関数

    • identifier-1は、MOVEステートメントの規則に従って、record-name-1が受け取り項目として指定された有効な送り出し項目である必要があります。

    • identifier-1とrecord-name-1は、同じ記憶領域を参照してはなりません。WRITEステートメントの実行後も、identifier-1の情報は依然として有効です。

  • identifier-2

    整数データ項目である必要があります。

  • ADVACING句

    ADVANCING句は、出力レコードのページ位置を調整します。

    • ADVANCING句の規則

      ADVANCING句が記述されると、以下の規則が適用されます。

      • BEFORE ADVANCINGを指定すると、行が印刷されてからページが進みます。

      • AFTER ADVANCINGを指定すると、ページが進んでから行が印刷されます。

      • identifier-2を指定すると、ページはidentifier-2の値に等しい行数だけ進みます。identifier-2は、整数データ項目である必要があります。

      • integer-1を指定すると、ページはinteger-1の値に等しい行数だけ進みます。

      • integer-1またはidentifier-2の値を0にすることができます。

      • PAGEを指定すると、次の論理ページに進む前か、または進む後(AFTER句またはBEFORE句に応じて)にレコードが印刷されます。

      • 簡略名を指定すると、チャンネル1から12までスキップしたり、または行送り抑制が起こります。簡略名は、SPECIAL-NAMES段落に記述されている必要があります。

      ADVANCING句がWRITEステートメントに記述されているか、またはファイルにLINAGE節があると、紙送り制御文字が生成され、レコードに添付されます。ADVANCING句が省略されると、AFTER ADVANCING 1 LINEが記述されたかのように動作します。

    • LINAGE-COUNTERの規則

      ファイルにLINAGE節を指定すると、LINAGE-COUNTER特殊レジスターはWRITEステートメントが実行されるたびに、以下の規則に従って変更されます。

      • ADVANCING PAGEが指定されると、LINAGE-COUNTERは1になります。

      • ADVANCING identifier-2またはinteger-1を指定すると、LINAGE-COUNTERは、identifier-2またはinteger-1の値だけ増加されます。

      • ADVANCING句を省略すると、LINAGE-COUNTERは1だけ増加されます。

      • 新しいページに再配置されると、LINAGE-COUNTERは1になります。

  • END-OF-PAGE句

    • END-OF-PAGE句が指定されており、WRITEステートメントによって論理ページの最後に達すると、END-OF-PAGE句のimperative-statement-3に指定されたステートメントを実行します。END-OF-PAGE句が指定されている場合、FD項目にはLINAGE節が含まれている必要があります。

    • END-OF-PAGE条件は、ページ本体内のフッター領域にレコード行が印刷されるか、ADVANCING句によって行送りが生じた場合に発生します。

      すなわち、END-OF-PAGE条件は、LINAGE-COUNTER特殊レジスターの値がLINAGE節のWITH FOOTING句で指定された値と等しくなるか、または大きくなると発生します。

    • 自動ページ・オーバーフロー条件は、WRITEステートメントが現在のページ本体で最後まで処理されず、次のページに進むときに発生します。

    • END-OF-PAGE条件または自動ページ・オーバーフロー条件が起こり、END-OF-PAGE句が指定されていると、imperative-statement-3に指定されたステートメントが実行されます。

  • INVALID KEY句

    • 以下の場合、無効キー条件が起こります。

      • 指標ファイルに対して順次アクセスであり、OUTPUTモードでオープンされたとき、基本レコード・キーの値が前のレコードより小さい場合

      • 指標ファイルに対してI-OモードまたはOUTPUTモードでオープンされたとき、基本レコード・キーの値がすでに存在しているレコードの基本レコード・キーの値と同じである場合

      • 相対ファイルに対してランダム・アクセス・モードまたは動的アクセス・モードのとき、RELATIVE KEYがすでに存在しているレコードのRELATIVE KEYと同じである場合

  • END-WRITE句

    • 明示的にWRITEステートメントの終了を示します。

以下は、各I-OモードにおけるWRITEステートメントの使用についての説明です。

  • 順次ファイル

    • 順次ファイルの最大レコード長は、ファイルが作成されたときに設定され、以降は変更できません。

    • ファイル位置指示子は、WRITEステートメントの実行に影響を与えません。

    • ファイル制御項目にFILE STATUS節が指定されていると、WRITEステートメントの実行後、その結果によりファイル状態キーが更新されます。

  • 指標ファイル

    • 指標ファイルに対してWRITEステートメントを実行する前に、基本レコード・キー(ファイル制御項目にRECORD KEYで定義されたデータ項目)を目的の値で設定する必要があります。この値は、ファイル内で一意でなければなりません。

    • ファイル制御項目にACCESS IS SEQUENTIALが指定されていると、RECORD KEY値の順にレコードが書き込まれる必要があります。

  • 相対ファイル

    • ファイル制御項目にACCESS IS SEQUENTIALが指定されていると、最初のレードは相対レコード番号1、2番目のレコードは相対レコード番号2、3番目のレコードは相対レコード番号3、...というようにファイルに書き込まれます。このとき、ファイル制御項目にRELATIVE KEYが指定されていれば、書き込まれたレコードの相対番号がRELATIVE KEYに保存されます。

    • ファイル制御項目にACCESS IS RANDOMまたはACCESS IS DYNAMICが指定されていると、WRITEステートメントが実行される前に、RELATIVE KEYが指定された値を持っている必要があります。WRITEステートメントが実行されると、このレコードは、ファイル内の指定された相対レコード番号として保存されます。