READ

目的

入力ファイルまたは更新ファイルからレコードを読み取ります。

構文

READ FILE(f)[INTO(v) [KEY(k)|KEYTO(r)]|
           SET(p)[KEY(k)|KEYTO(r)]
           IGNORE(expr)];

パラメーター

f
レコードを読み取るファイルへの参照。
v
レコードの内容を割り当てる変数への参照。
p
ポインター変数。
expression
評価されて整数値に変換されます。
k
読み取るレコードの位置を特定するために使用されるキーを指定する式。
r
読み取るレコードのキーを割り当てる変数。

指定子の FILE、INTO、KEYTO、および KEY は任意の順序で記述できます。KEY を指定した場合は KEYTO は指定できません。オプションの INTO、SET、または IGNORE が指定されていない場合、IGNORE(1) と同等になります。

説明

READ 文は、レコード ファイルからレコードを読み取ります。

FILE オプションには、ファイル値を生成する参照 f を含める必要があります。f で識別されるファイルは、RECORD INPUT または UPDATE で開かれたファイルか閉じているファイルでなければなりません。ファイルが閉じている場合は READ 文で開かれ、INPUT RECORD SEQUENTIAL 属性が設定されます。

ファイルが KEYED SEQUENTIAL 属性で開かれている場合、KEY オプションを指定することができます。ファイルが DIRECT 属性で開かれている場合は、必ず KEY オプションを指定する必要があります。

READ 文で INTO オプションを指定すると、データ レコードが参照先の変数にコピーされます。SET オプションは、READ 操作中にデータが移動されたバッファー内の位置を指すように設定されたポインター変数を指定します。このバッファーの記憶域がランタイム システムで処理されます。

次の例では、ポインター値 P の値が次の順編成レコードのバッファー内の位置 F に設定されています。

READ FILE (F) SET (P) ;

IGNORE オプションは、索引付きの SEQUENTIAL INPUT ファイルまたは SEQUENTIAL UPDATE ファイルに対する READ 文で使用できます。

IGNORE オプションの expression は、評価されて整数値 n に変換されます。n が 0 より大きい場合、n 個のレコードが無視されます。同じファイルに対する後続の READ 文は (n+1) 番目のレコードにアクセスすることになります。n が 1 未満の場合、READ 文には効果はありません。

IGNORE オプションは索引ファイル以外のファイルでは使用できません。

次の例では、ファイル内の次の 5 つのレコードを無視するように指定しています。

READ FILE (IN) IGNORE (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 オプションで指定された文字可変文字列に割り当てます。文字列に改行文字は含まれません。

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 にコピーされます。

制約事項

なし。