READ 文

順呼び出しの場合、READ 文はファイルから次

MF または前の

論理レコードを利用できるようにする。乱呼び出しの場合、READ 文は大記憶ファイルから指定されたレコードを利用できるようにする。

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


*
MF 

書き方 2 の一般形式 (行順編成ファイル)


*

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


*

書き方 4 の一般形式 (相対ファイル)


*

書き方 5 の一般形式 (索引ファイル)


*

指令とランタイム スイッチ

  1. 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。
    • RETRYLOCK - ロックされているレコードの読み込みを再試行させる。
  2. 下記のランタイム スイッチによって、この項に記述した意味が影響を受ける可能性がある。
    • B、B1 - READ NEXT 文を実行中にロックされたレコードが出てくると、それを飛ばすようにレコード ポインターを更新させる。
    • N - 行順レコードを読むときに、制御文字の前の空文字の解釈を制御する。
    • T - 行順レコードを書くときに、タブ文字の挿入を制御する。

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

  1. 入力ファイルのレコード記述に大きさの異なる論理レコードが含まれているときは、INTO 指定をしてはならない。

    ANS85 この制限は撤廃された。

    一意名のデータの記憶領域とファイル名のレコードの記憶領域とが、同じ記憶領域を指してはならない。

  2. OSVSVSC2MF 一意名は、浮動小数点数データ項目でもよい。
  3. ファイル名に適用できる USE 手続きを設定していない場合には、INVALID KEY 指定または AT END 指定を書く。

    OSVSVSC2MF この規則は強制しない。

書き方 1、3、4、5 (レコード順編成ファイル、相対ファイル、索引ファイル) の構文規則

  1. MF WITH LOCK を指定できるのは、共有ファイル中で単一のレコードをマニュアル ロックする場合だけである。
  2. MF WITH NO LOCK を指定できるのは、共有ファイル中でレコードをマニュアルまたは自動的にロックする場合だけである。

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

  1. 動的呼び出し法でレコードを順検索する場合は、NEXT

    MF または PREVIOUS

    を指定する。

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

  1. MF WITH KEPT LOCK を指定できるのは、共有ファイル中で複数のレコードをマニュアル ロックする場合だけである。

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

  1. 乱呼び出し法または動的呼び出し法でファイルのレコードを乱検索する場合は、書き方 4 または 5 を用いる。

書き方 5 (索引ファイル) の構文規則

  1. データ名

    ISO2002MF または分割キー名

    は、ファイル名のファイルのレコード キーとして指定したデータ項目の名前とする。

    OSVSMF データ名はまた、ファイル名と対応するレコード キーとして指定した、データ項目の再定義となり、同じ長さをもつデータ名を作ることもできる。

    OSVS 再定義は、レコード キーと異なる長さをもつことがある。

  2. データ名

    ISO2002MF または分割キー名

    は修飾してもよい。
  3. MF 分割キー名は、ファイル名のファイルのレコード キーとして指定したいくつかのデータ項目を結合したものである。
  4. DIALECT"RM" 指令または DIALECT"ACU" 指令が有効な場合、KEY 指定で指定されたデータ名または分割キー名は、それらの最後の修飾子としてファイル名が明示的に指定されていなければ、READ 文で指定されたファイル名で暗黙的に修飾される。それ以外の方言の場合は、参照規則を一意にするために、必要に応じてデータ名または分割キー名の最後の修飾子でファイル名を明示的に指定しなければならない。

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

  1. READ 文を実行するときには、対象のファイルを INPUT モードまたは I-O モードで開いておく (「OPEN (開く) 文」のトピックを参照)。
  2. READ 文を実行すると、ファイル名に対応する FILE STATUS データ項目が存在すれば、その値が更新される (「手続き部」の章の「入出力状態」のトピックを参照)。
  3. 1 つのファイルに論理レコードのレコード記述がいくつもある場合、これらのレコードは自動的に同じ記憶領域を共有する。これは、暗黙的にレコードを再定義することと同じである。現在のデータ レコードの範囲を超えてデータ項目が存在する場合、READ 文の実行が終了したときにその内容はどうなっているかわからない。
  4. INTOを指定すると、読み込まれたレコードは、レコード領域から一意名に指定した領域へ転記される。その際、CORRESPONDING 指定のない MOVE 文に関する規則が適用される。READ 文の実行が不成功であったときは、この暗黙的な転記は行われない。一意名に添字付けまたは指標付けがなされている場合、レコードが読み込まれてからその一意名のデータ項目に転記される直前に評価される。
  5. INTOを指定すると、読み込まれたレコードは、入力レコード領域でも一意名のデータ領域でも利用可能となる。
  6. ファイル位置指示子が次の論理レコードが存在しないことを示しているか、または不定入力ファイルが存在しない場合、下記の処理が順に行われる。
    1. ファイル位置指示子の内容に応じた値が、ファイル名-1 に対応する入出力状態に設定される (「手続き部」の章の「入出力状態」のトピックを参照)。
    2. AT END 指定をしてあると、制御は無条件文-1 に移される。この場合、ファイル名-1 のファイル結合子に対応する USE AFTER EXCEPTION 手続きが設定してあっても実行されない。その後、無条件文-1 の中の各文に関する規則に従って、処理は続行される。その中で、制御の明示をもたらす分岐文または条件文が実行された場合は、その文に関する規則に従って制御が移される。そうでなければ、無条件文-1 の実行が終了した時点で、制御は READ 文の末尾に移される。この場合、NOT AT END指定 があっても、無視される。
    3. AT END 指定をしていない場合、ファイル名-1 に対応する USE AFTER STANDARD EXCEPTION 手続きを設定する必要がある。この場合、その USE 手続きが実行される。その実行が終了すると、READ 文の末尾の次の実行文に制御が戻される。

      ANS85 AT END 条件が発生した場合、READ 文の実行は不成功になる。

  7. READ 文の実行が不成功に終わった後では、対応するレコード領域の内容はどうなっているかわからない。また、ファイル位置指示子は、次のレコードが存在しないことを示すように設定される。
  8. UNIX プラットフォームでの非トランザクション ファイル処理の実行時に FCD3 を使用する場合、レコード ロック状態になると、ロック プロセスのプロセス ID が FCD の fcd-session-id に返される。この処理は、Fileshare を使用する場合は適用されない。

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

  1. READ 文によって利用可能となるレコードは、下記の規則に従って決定される。
    1. ANS85 OPEN 文の実行によってファイル位置指示子の位置が設定されている場合は、ファイル位置指示子が指すレコードが利用できるようになる。
    2. ANS85 前の READ 文の実行によってファイル位置指示子の位置が設定されている場合は、ファイル位置指示子が次のレコードを指すように更新され、そのレコードが利用できるようになる。

      MF しかし、前の READ 文によってレコードがロックされている場合は、ファイル位置指示子は変更されない。そして、ファイル位置指示子によって指されるレコードが利用可能にされる。

  2. READ 文の実行中にリールまたはユニットの終わりが検出されたが、まだファイルの終わりには達していない場合、下記の手続きが実行される。
    1. 標準終了リール/ユニット ラベル手続き
    2. リール/ユニットの交換
    3. 標準開始リール/ユニット ラベル手続き
    4. 新しいリール/ユニットの最初のデータ レコードの読み込み
  3. OPTIONAL 指定をしたファイルを開こうとしたときにそのファイルが存在しないと、そのファイルに対して最初に READ 文が実行されたときに AT END 条件が発生し、READ 文の実行は不成功に終わる。標準のファイル終了手続きは実行されない (「ファイル管理段落」、「OPEN (開く) 文」、および「USE (使用) 文」のトピックを参照)。その後、実行は、一般規則 13 に記してあるように進む。
  4. MF  INPUT 用に開かれたファイルに関しては、READ 文も READ WITH LOCK 文も READ WITH KEPT LOCK 文もレコード ロックを得ることはない。
  5. MF レコード ロック方式が AUTOMATIC または MANUAL である 1 つの順ファイルを複数の実行単位から EXTEND を指定して開くと、そのファイルが共有される。ただし、そのファイルの後ろに追加されるレコードの順序は保証されない。
  6. MF I-O 用に開かれたファイルに関しては、以下のようになる。
    1. ファイルに LOCK MODE AUTOMATIC が指定してあると、READ 文に WITH NO LOCK を指定しないかぎり読み込まれた各レコードはロックされる。
    2. ファイルに LOCK MODE MANUAL が指定してあると、READ 文ではレコード ロックを得ることはできない。レコード ロックを得るためには、READ WITH LOCK 文を使用する。READ 文に WITH NO LOCK を指定しても、注記になる。
    3. レコード ロックがいつ解除されるかは、単一のレコードをロックしたか複数のレコードをロックしたかによって異なる (「ファイル管理記述項」のトピックを参照)。
  7. MF  ある実行単位からは I-O または INPUT 用に開き、別の実行単位からは EXTEND 用に開いたファイルに対して READ 文を実行した際に、ファイル終了状態が発生した場合、その READ 文を実行しようとした実行単位側でそのファイルを閉じなければならない。そのファイルの状態は終了のまま残るため、その実行単位からはファイルの後ろに追加されたレコードを呼び出すことはできない。

書き方 1、2、3 (順編成ファイル、相対ファイル、索引ファイル) の一般規則

  1. READ 文の実行中に AT END 条件が発生しなかった場合、AT END 指定をしてあっても無視されて、以下の処理が行われる。
    1. ファイル位置指示子が設定されて、ファイル名-1 に対応する入出力状態が更新される。
    2. ファイル終了条件以外の例外条件が発生していると、ファイル名-1 に適用できる USE AFTER EXCEPTION 手続きが指定してあればそれが実行されて、その後で USE 文の規則に従って制御が移される (「USE (使用) 文」のトピックを参照)。
    3. 例外条件が何も発生していなければ、読み込み対象レコードがレコード領域中で利用できるようにされる。また、INTO を指定してあれば、暗黙の転記処理が行われる。その後で、制御は READ 文の末尾に移される。ただし、無条件文-2 が指定されていれば無条件文-2 に移される。この場合、無条件文-2 の中の個々の文に関する規則に従って、以降の処理が続行される。制御を明示的に移す制御分岐または条件文が実行されると、その文の規則に応じて制御が移される。それ以外の場合には、無条件文-2 の実行が完了すると、READ 文の最後に制御が移される。
  2. NEXT 指定をした READ 文を実行したときに、対象ファイル中に次の論理レコードが存在しないと、AT END 条件が発生し READ 文の実行は不成功に終わったものと見なされる。「手続き部」の章の「入出力状態」のトピックを参照。
  3. ANS85 順編成ファイルまたは

    順呼び出し法で呼び出すファイルに関しては、NEXT 指定は書いても書かなくてもよい。READ文の実行には影響を及ぼさない。

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

  1. MF 読み込んだレコードがロックされていると、ファイル位置指示子はそのレコードを指すように設定される。以降、READ NEXT 文または READ PREVIOUS 文は同じレコードを再び取り出す。

    NOT AT END 指定は、READ 文の実行が正常に終了した場合にだけ実行される。

  2. MF PREVIOUS 指定をした READ 文を実行したときに、対象ファイル中に前の論理レコードが存在しないと、AT END 条件が発生し READ 文の実行は不成功に終わったものと見なされる。
  3. AT END 条件が検出された場合、前の論理レコードが存在しないため、

    MF そのファイルに対して次に書き方 3 の READ 文を実行するならば、NEXT を指定する。そうでなければ、

    下記の処理を続ける。

    1. 該当するファイルに対して CLOSE 文を実行し、次いで OPEN 文を実行する。いずれも正常に終了しなければならない。
    2. そのファイルに対して START 文を実行する。正常に終了しなければならない。
    3. そのファイルに対して、書き方 4 (相対ファイル) または書き方 5 (索引ファイル) の READ 文を実行する。
  4. 動的呼び出し法を指定したファイルに関して、NEXT 指定をした READ 文を実行すると、

    MF 一般規則 8 に記述したように次の論理レコードが取り出される。

  5. READ 文によって利用可能となるレコードは、下記の規則に従って決定される。
    1. MF  OPEN 文の実行によって ファイル位置指示子が設定されているところへ PREVIOUS を指定した READ 文を実行すると、AT END 条件が発生する。また、

      START 文または OPEN 文の実行によってファイル位置指示子が設定されていて、ファイル位置指示子によって指されるレコードの呼び出しができる場合は、そのレコードが利用可能にされる。相対ファイルのレコードを削除したり索引ファイルの副レコード キーを変更したりすることによって、レコードが呼び出しできる状態になった場合は、参照キーによって確立されている呼び出し経路中の次のレコードを指すように、ファイル位置指示子が更新される。

      MF ただし、PREVIOUS 指定をしていると、

      前のレコードを指すように、ファイル位置指示子が更新される。そして、ファイル位置指示子によって指されるレコードが利用可能にされる。

    2. 前の READ 文の実行によってファイル位置指示子が設定された場合、ファイル位置指示子はファイル中に存在する次のレコードを指すように更新される。

      MF ただし、PREVIOUS 指定をしていると、

      前のレコードを指すように、ファイル位置指示子が更新される。

      MF 前の READ 文によってレコードがロックされた場合は、ファイル位置指示子は変更されない。そして、ファイル位置指示子によって指されるレコードが利用可能にされる。

書き方 1、3、4、5 (順編成ファイル、相対ファイル、索引ファイル) の一般規則

  1. MF 単一のレコードをマニュアル ロックするように指定したファイルを入出力両用に開くと、READ 文に WITH LOCK 指定をしたときにだけ、実行単位はレコード ロックを取得する。単なる READ 文では、レコード ロックを得ることはできない。ロックされているレコードを読み飛ばすためには、START 文を用いてファイル位置指示子を更新する。ただし、キーの重複を認めている副レコード キーに関しては、この方法を採ることはできない。
  2. MF 複数のレコードをマニュアル ロックするように指定したファイルを入出力両用に開くと、READ 文に WITH KEPT LOCK 指定をしたときにだけ、実行単位はレコード ロックを取得する。単なる READ 文では、レコード ロックを得ることはできない。ロックされているレコードを読み飛ばすためには、START 文を用いてファイル位置指示子を更新する。ただし、キーの重複を認めている副レコード キーに関しては、この方法を採ることはできない。
  3. MF WITH WAIT 指定をすると、必要があれば待ってでも、レコード ロックが必ず取得される。

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

  1. RELATIVE KEY を指定したファイルに対して READ 文を実行すると、利用可能にされたレコードの相対レコード番号が、RELATIVE KEY データ項目に収められる。

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

  1. READ 文を実行すると、ファイルの RELATIVE KEY に指定したデータ項目中に保持されている相対レコード番号がファイル位置指示子に設定され、そのレコードが利用可能にされる。ファイル中にその相対レコード番号のレコードが存在しない場合は、無効キー条件が発生し、READ 文の実行は不成功に終わる (「手続き部」の章の「無効キー条件」のトピックを参照)。

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

  1. MF IGNORE LOCK 指定をすると、READ 文はレコードがロックされていないかのように実行される。

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

  1. 索引ファイルを順呼び出しする場合、検索のキーとしている副レコード キーに値が同じものがあると、これらは WRITE 文または REWRITE 文によって書き出された順に利用可能にされる。

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

  1. KEY 指定をしないと、主レコード キーが検索キーとして使用される。動的呼び出しを指定すると、後に書き方 3 の READ 文を実行するときにも、この検索キーが使用される。
  2. KEY 指定をすると、データ名-1

    ISO2002MF または分割キー名

    がその参照キーとして使用される。動的呼び出しを指定すると、後に書き方 3 の READ 文を実行するときにも、この検索キーが使用される。ただし、別の参照キーを指定すると、今度はそれが使用されるようになる。

  3. 書き方 5 の READ 文を実行すると、参照キーの値がファイル中のレコードの対応するデータ項目に格納されている値と順次比較されて、両者の値が最初に一致するものが見つけ出される。ファイル位置指示子がそのレコードを指すように設定されて、そのレコードが利用可能とされる。両者の値が一致するレコードが見つからないと、無効キー条件が発生し、READ 文の実行は不成功に終わる (「手続き部」の章の「無効キー条件」のトピックを参照)。