入力ファイルまたは更新ファイルからレコードを読み取ります。
READ FILE(f)[INTO(v) [KEY(k)|KEYTO(r)]| SET(p)[KEY(k)|KEYTO(r)] IGNORE(expr)];
指定子の FILE、INTO、KEYTO、および KEY は任意の順序で記述できます。KEY を指定した場合は KEYTO は指定できません。オプションの INTO、SET、または IGNORE が指定されていない場合、IGNORE(1) と同等になります。
READ FILE(F) INTO(X); READ FILE(G) INTO(Y) KEY(N+1); READ FILE (TOWN_FILE) INTO (TOWN_BUFFER) KEYTO (SAVE_ADDRESS);
最後の例の READ 文は、ファイル TOWN_FILE の次の順編成レコードを読み取り、変数 TOWN_BUFFER に割り当てます。読み取ったレコードに関連付けられたキーが変数 SAVE_ADDRESS にコピーされます。
なし。
説明
READ 文は、レコード ファイルからレコードを読み取ります。
FILE オプションには、ファイル値を生成する参照 f を含める必要があります。f で識別されるファイルは、RECORD INPUT または UPDATE で開かれたファイルか閉じているファイルでなければなりません。ファイルが閉じている場合は READ 文で開かれ、INPUT RECORD SEQUENTIAL 属性が設定されます。
ファイルが KEYED SEQUENTIAL 属性で開かれている場合、KEY オプションを指定することができます。ファイルが DIRECT 属性で開かれている場合は、必ず KEY オプションを指定する必要があります。
READ 文で INTO オプションを指定すると、データ レコードが参照先の変数にコピーされます。SET オプションは、READ 操作中にデータが移動されたバッファー内の位置をポイントするように設定されたポインター変数を指定します。このバッファーの記憶域がランタイム システムで処理されます。
次の例では、ポインター値 P の値が次の順編成レコードのバッファー内の位置 F に設定されています。
IGNORE オプションは、索引付きの SEQUENTIAL INPUT ファイルまたは SEQUENTIAL UPDATE ファイルに対する READ 文で使用できます。
IGNORE オプションの expression は、評価されて整数値 n に変換されます。n が 0 より大きい場合、n 個のレコードが無視されます。同じファイルに対する後続の READ 文は (n+1) 番目のレコードにアクセスすることになります。n が 1 未満の場合、READ 文には効果はありません。
次の例では、ファイル内の次の 5 つのレコードを無視するように指定しています。
索引ファイル以外のファイルに対して KEY オプションを指定する場合は、値を正の整数に変換できる式を指定する必要があります。この値は f に関連付けられたファイルで識別されるキー付きファイル内のレコードのキー値でなければなりません。f のレコードを識別できないキー値を使用してファイルを読み取ろうとすると、KEY 条件が通知されます。索引 (VSAM) ファイルの場合、キー値の型は Character、Widechar、または Graphic のいずれかでなければならず、それ以外の場合は Character に変換されます。
KEYTO オプションを指定する場合は Character 型でなければならず、それ以外の場合は Character 型に変換されます。最大長は実装の定義に従います(詳細については、「Open PL/I ユーザー ガイド」を参照してください)。ファイルはキー付きファイルでなければなりません。レコードのキー値は r に割り当てられます。
KEY オプションが指定されている場合、ファイルを KEYED 属性で開いておく必要があります。KEY オプションを指定することによって暗黙的に KEYED 属性で開かれるわけではありません。
ファイルには、開く方法に関係なく、INPUT または UPDATE のいずれかの属性が設定されている必要があります。
KEY オプションが指定されている場合、ファイルはキー値で識別されるレコードを読み取るように位置指定されます。それ以外の場合は、SEQUENTIAL ファイルの現在のレコードを読み取るように位置指定されます。レコードを読み取った後、SEQUENTIAL ファイルの場合は現在の位置が次のレコードに進められます。DIRECT ファイルの場合は現在の位置は変更されません。
Open PL/I では、INTO オプションでスカラー文字可変文字列変数を指定すれば、ストリーム ファイルで READ 文を使用できます。READ 文は次の入力行全体を読み取り、INTO オプションで指定された文字可変文字列に割り当てます。文字列に改行文字は含まれません。