READ 文

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

MF または前

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

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


*
MF 

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


*

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


*

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


*

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


*

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

  1. 予約語リストのフラグ設定および修正を行うコンパイラ指令に加えて、以下の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
    • RETRYLOCK - ロックされているレコードの読み取りを再試行させる。
  2. 以下のランタイム システム (RTS) スイッチにより、本セクションに記載されている意味が影響を受ける可能性がある。
    • 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. データ名 (data-name)

    ISO2002MF または分割キー名 (split-key-name)

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

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

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

  2. データ名 (data-name)

    ISO2002MF または分割キー名 (split-key-name)

    は修飾してもよい。
  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. ファイル位置指示子の内容に応じた値が、file-name-1 に対応する FILE STATUS データ項目に設定される。「手続き部」の章の「入出力状態」のトピックを参照。
    2. AT END 指定をしてあると、制御は AT END imperative-statement-1 に移される。この場合、file-name-1 のファイル結合子に対応する USE AFTER EXCEPTION 手続きが設定してあっても実行されない。その後、imperative-statement-1 で指定した各文に関する規則に従って、処理が継続する。制御を明示的に移す手続き分岐文または条件文が実行されると、その文の規則に従って制御が移される。それ以外の場合は、imperative-statement-1 の実行が終了すると制御は READ 文の末尾に移され、NOT AT END 指定は記述されていても無視される。
    3. AT END 指定をしていない場合、file-name-1 に対応する USE AFTER STANDARD EXCEPTION 手続きを設定する必要がある。この場合、その USE 手続きが実行される。その実行が終了すると、READ 文の末尾の次の実行文に制御が戻される。

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

  7. READ 文の実行が不成功に終わった後では、対応するレコード領域の内容はどうなっているかわからない。また、ファイル位置指示子は、次のレコードが存在しないことを示すように設定される。

書き方 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 入出力用に開かれたファイルに関しては、以下のようになる。
    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. ファイル位置指示子が設定されて、file-name-1 に対応する入出力状態が更新される。
    2. AT END 条件以外の例外条件が発生していると、file-name-1 に適用できる USE AFTER EXCEPTION 手続きが指定してあればそれが実行されて、その後で USE 文の規則に従って制御が移される(「USE 文」トピックを参照)。
    3. 例外条件が何も発生していなければ、読み込み対象レコードがレコード領域中で利用できるようにされる。また、INTO を指定してあれば、暗黙の転記処理が行われる。その後で、制御は READ 文の末尾に移される。ただし、imperative-statement-2 が指定されていれば imperative-statement-2 に移される。この場合、imperative-statement-2 の各文に関する規則に従って、以降の処理が続行される。制御を明示的に移す制御分岐または条件文が実行されると、その文の規則に応じて制御が移される。それ以外の場合は、imperative-statement-1 の実行が終了すると制御は 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 に指定したデータ項目中に保持されている相対レコード番号がファイル位置指示子に設定され、そのレコードが利用可能にされる。ファイル中にその相対レコード番号のレコードが存在しない場合は、INVALID KEY 条件が発生し、READ 文の実行は不成功に終わる(「手続き部」の章の「INVALID KEY 条件」トピックを参照)。

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

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

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

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

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

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

    ISO2002MF または分割キー名 (split-key-name)

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

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