目的
READ ステートメントはデータ転送入力ステートメントです。
構文
>>-READ--+-name---------------------------------------+--------><
+-format--+--------------------+-------------+
| '-,--input_item_list-' |
'-(--io_control_list--)--+-----------------+-'
'-input_item_list-'
|
- format
- FMT=format の項で解説する形式識別子です。
これはホレリス定数であってはなりません。
- name
- 名前リストのグループ名です。
- input_item
- 入力リスト項目です。
入力リストには転送するデータを指定します。
入力リスト項目には、次のものを指定できます。
- io_control
- 装置指定子 (UNIT=) を必ず 1 つ含んでいなければならない
リストです。このリストには、以下に説明する他の有効な指定子をそれぞれ 1 つずつ入れることができます。
- [UNIT=] u
- 入力操作で使用する装置を指定する装置指定子です。
u は、外部装置識別子または内部ファイル識別子です。
+----------------------------------IBM 拡張----------------------------------+
外部装置識別子は外部ファイルを示します。
それは次のうちの 1 つです。
- 値が 0 〜 2,147,483,647 の範囲内にある整数式。
- アスタリスク、外部装置 5 を識別し、標準入力にあらかじめ接続されているもの。
+------------------------------End of IBM 拡張-------------------------------+
内部ファイル識別子は内部ファイルを示します。
これは、ベクトル添え字を持つ配列セクションにはならない文字変数の名前です。
オプションの文字である UNIT= を省略する場合は、io_control_list の最初の項目として u を指定しなければなりません。
オプションの文字である UNIT= を指定する場合、
オプションの文字である FMT= または
オプションの文字 NML= もなければなりません。
- [FMT=] format
- 入力操作で使用する形式を指定する形式指定子です。
format は形式識別子で、次のいずれかです。
- FORMAT ステートメントのステートメント・ラベル。
FORMAT ステートメントは同じ有効範囲単位内になければなりません。
- スカラー INTEGER(4) または INTEGER(8) 変数の名前。
これには FORMAT ステートメントのステートメント・ラベルが割り当てられています。
FORMAT ステートメントは同じ有効範囲単位内になければなりません。
+---------------------------------Fortran 95---------------------------------+
Fortran 95 ではステートメント・ラベルの割り当ては行えません。
+-----------------------------End of Fortran 95------------------------------+
- 文字定数。
これは左括弧で始まり、右括弧で終わっていなければなりません。
両括弧の間で使用できるのは、FORMAT ステートメントに記述している
形式コードだけです。
ブランク文字は左括弧の前または右括弧の後ろにあってもかまいません。
- 左端の文字位置の部分が有効な形式になっている文字データを含む文字変数。
有効な形式とは左括弧で始まり、右括弧で終わる形式です。
両括弧の間で使用できるのは、FORMAT に記述した形式コードだけです。
ブランク文字は左括弧の前または右括弧の後ろにあってもかまいません。
format が配列エレメントの場合、形式識別子の長さは配列エレメントの長さを
超えてはなりません。
- 非文字組み込み型の配列。
文字配列の項で説明したように、データは有効な形式識別子でなければなりません。
- 文字式。ただし、オペランドが定数の名前でない場合、
長さの継承を指定するオペランドの連結を含む文字式を除きます。
- リスト指示形式設定を指定するアスタリスク。
- 事前に定義した名前リストのリスト名を指定する名前リスト指定子。
オプションの文字である FMT= を省略する場合、io_control_list 内の 2 番目の項目には format を指定する必要があります。
最初の項目は、オプションの文字 UNIT= を省略した装置指定子でなければなりません。
1 つの入力ステートメントに NML= と FMT= の両方を指定することはできません。
- ADVANCE= char_expr
- このステートメントについて非事前入力が
発生するかどうかを決定する事前指定子です。
char_expr はスカラー文字式で、式の値は、YES または NO の
いずれかに評価される必要があります。NO を指定した場合、事前入力は行われません。
YES を指定した場合、事前定様式順次入力、または事前ストリーム入力が発生します。
デフォルト値は YES です。ADVANCE= を指定できるのは、内部ファイル単位指定子を指定しない明示的な形式仕様を持つ定様式の
順次 READ ステートメントまたはストリーム READ ステートメント内だけです。
- END= stmt_label
- エラーが発生しないでファイルの最終レコードまで達した場合に、
プログラムの実行を継続するステートメント・ラベルを指定するファイルの終わり指定子です。
外部ファイルはファイルの最終レコードの後に位置付けられます。
IOSTAT= 指定子を指定した場合、この指定子には負の値が割り当てられます。
NUM= 指定子を指定した場合、この指定子には整数値が割り当てられます。
エラーが発生した場合、
そのステートメントに SIZE= 指定子が
含まれていると、指定した変数は整数値で定義されます。END= 指定子をコーディングすると、ファイルの終わりに関する
エラー・メッセージが抑止されます。
この指定子は、順次アクセスまたは直接アクセス用に接続された装置に
指定することができます。
- EOR= stmt_label
- レコードの終わり指定子です。
この指定子を指定し、レコードの終わりが検出され、ステートメントの実行中に
エラーが発生しなかった場合は、以下のとおりです。PAD= がある場合、次のようになります。
- PAD= 指定子の値が YES の場合、レコードはブランクで
埋め込まれ、入力リスト項目と、レコードが含む文字よりも多くの文字を必要とするデータ編集記述子を満たします。
- READ ステートメントの実行が終了します。
- READ ステートメントに指定されているファイルが現在のレコードの
後ろに置かれます。
- IOSTAT= 指定子を指定している場合、指定した変数はファイルの
終わりの値と異なる負の値で定義されます。
- SIZE= 指定子を指定している場合、指定した変数は整数値で定義されます。
- EOR= 指定子によって指定されているステートメント・ラベルを含む
ステートメントで実行が継続されます。
- レコードの終わりに関するメッセージが抑止されます。
- ERR= stmt_label
- エラーが発生した場合に制御が移される実行可能ステートメントの
ラベルを指定するエラー指定子です。
ERR= 指定子をコーディングすると、エラー・メッセージは抑制されます。
+----------------------------------IBM 拡張----------------------------------+
- ID= integer_variable
- データ転送が非同期に行われることを示します。
integer_variable は整変数です。
エラーが検出されない場合、integer_variable は、
非同期データ転送ステートメントの実行後に 1 つの値で定義されます。
この値は、対応する WAIT ステートメント内で使用されなければなりません。
非同期データ転送は、直接不定様式、順次不定様式、ストリーム不定様式のいずれかでなければなりません。内部ファイルへの非同期 I/O は禁止されています。
ロー文字装置への非同期 I/O (たとえば、テープまたは
ロー論理ボリュームへの非同期 I/O) は、禁止されています。
integer_variable を、データ転送 I/O リストのエンティティーや、
データ転送 I/O リストの io_implied_do の do_variable に
関連させることはできません。
integer_variable が配列エレメント参照の場合、その添え字値は、
データ転送、io_implied_do 処理、
または io_control_spec 内の他の指定子の定義や評価などによって
影響を受けてはなりません。
+------------------------------End of IBM 拡張-------------------------------+
- IOMSG= iomsg_variable
- 入出力操作によって戻されるメッセージを指定する入出力状況指定子です。
iomsg_variable は、デフォルトのスカラー文字変数です。これを、使用関連付けされた非ポインター保護変数にすることはできません。
この指定子を含む入出力ステートメントの実行が完了すると、iomsg_variable は以下のように定義されます。
- エラー、ファイルの終わり、またはレコードの終わりという条件が発生した場合、この変数には割り当てによる場合と同様に説明メッセージが割り当てられます。
- そのような条件が発生しなかった場合には、変数の値は変更されません。
- IOSTAT= ios
- 入出力操作の状況を示す入出力状況指定子です。
ios は整変数です。IOSTAT= 指定子をコーディングすると、エラー・メッセージは抑制されます。ステートメントの実行が完了すると、ios の値は次のように定義されます。
- エラーが発生しなかった場合、ファイルの終わりが検出されなかった場合、
レコードの終わりが検出されなかった場合は、ゼロが定義されます。
- エラーが発生した場合は正の値
- ファイルの終わりが検出されていて、しかも、
エラーが発生しなかった場合は、負の値が定義されます。
- レコードの終わりが検出されて、しかも、エラーが発生しなかったか
ファイルの終わりが検出された場合は、
ファイルの終わりの値とは異なる負の値が定義されます。
- [NML=] name
- 事前に定義した名前リストの名前を
指定する名前リスト指定子です。
オプションの文字の NML= を指定しない場合、
リストの 2 番目のパラメーターとして名前リストの名前を指定する必要があります。
また、最初の項目は UNIT= を省略した装置指定子でなければなりません。
NML= と UNIT= の両方を
指定する場合、すべてのパラメーターを任意の順序で指定することができます。 NML= 指定子
は FMT= の代替指定子です。1 つの入力ステートメント
に NML= と FMT= の両方を指定することはできません。
+----------------------------------IBM 拡張----------------------------------+
- NUM= integer_variable
- 入出力リストとファイルの間で転送されるデータの
バイト数を指定する数指定子です。
integer_variable は整変数です。 NUM= 指定子を使用できるのは、不定様式出力の場合に限られます。NUM パラメーターをコーディングすると、出力リストに表示されるバイト数が、レコードに書き込める
バイト数よりも大きい場合、出されるエラー表示は抑止されます。
この場合、integer_variable の値は、書き込み可能な最大レコード長に設定されます。
残りの出力リスト項目からのデータは、これ以後のレコードには書き込まれません。
+------------------------------End of IBM 拡張-------------------------------+
- POS= integer_expr
-
integer_expr は 0 より大きい整数式です。POS= はストリーム・アクセス用に接続されたファイル内で読み取られるファイル記憶単位のファイル位置を指定します。POS= は、位置決めを行うことができないファイルに使用してはなりません。
- REC= integer_expr
- 直接アクセス用に接続されたファイルの中で読み取るレコードの
番号を指定するレコード指定子です。
REC= 指定子を使用できるのは、直接入力の場合に限られます。
integer_expr は正の値を持つ整数式です。
リスト指示または名前リスト形式設定を使用している場合、および
装置指定子で内部ファイルを使用している場合、レコード指定子は有効ではありません。
END= 指定子を同時に用いることができます。
レコード指定子は、ファイル内のレコードの相対的な位置を示します。最初のレコードの相対位置番号は 1 です。
ストリーム・アクセス用に接続された装置を指定するデータ転送ステートメントで REC= を
指定してはなりません。
また、POS= 指定子を使用してはなりません。
- SIZE= count
- 現在の入力ステートメントの実行中にデータ編集記述子によって
転送される文字数を決定する文字カウント指定子です。
count は整変数です。埋め込みとして挿入されるブランクはカウントに含まれません。
>>-(--do_object_list-- , --------------------------------------->
>--do_variable = arith_expr1, arith_expr2----------------------->
>--+---+--+-------------+--)-----------------------------------><
'-,-' '-arith_expr3-'
|
- do_object
- 出力リスト項目です。
- do_variable
- 整数、または実数型のスカラー変数です。
- arith_expr1、arith_expr2、 および arith_expr3
- スカラー数式です。
暗黙 DO リストの範囲は do_object_list です。
繰り返し回数および DO 変数の値は、DO ステートメントの場合と同様に arith_expr1、arith_expr2、および arith_expr3 で決まります。
暗黙 DO リストが実行されると、暗黙 DO リストの
繰り返しごとに、do_object_list 内の項目が 1 つ指定され、DO 変数のその時点の値に応じた適切な値に置き換えられます。
DO 変数または関連するデータ項目を入力リスト項目
として do_object_list に指定することはできません。ただし、
暗黙 DO リストの外にある同じ READ ステートメント内
では DO 変数または関連するデータ項目を読み取ることができます。
規則
ERR=、EOR=、および END= 指定子によって指定される
ステートメント・ラベルは READ ステートメントと同じ有効範囲単位内にある分岐のターゲットとなるステートメントを参照していなければなりません。
EOR= 指定子または SIZE= 指定子を用いた場合は、
値 NO を持つ ADVANCE= 指定子も指定する必要があります。
+----------------------------------IBM 拡張----------------------------------+
NUM= 指定子を指定した場合は、形式指定子も名前リスト指定子も
指定することはできません。
+------------------------------End of IBM 拡張-------------------------------+
IOSTAT=、SIZE=、NUM= 指定子に指定された変数を、
入力リスト項目、名前リストのリスト項目、および暗黙 DO リスト
の DO 変数に関連付けることはできません。
このような指定子変数が配列エレメントの場合、データ転送、暗黙 DO 処理、
または他の指定子の定義または評価が、その添え字値に影響を与えてはいけません。
io_control_list を指定していない READ ステートメントは、
外部装置識別子がアスタリスクである io_control_list を
指定した READ ステートメントと同じ装置を指定します。
ERR= と IOSTAT= 指定子が設定されていて、同期データ転送中にエラーが
検出されると、ERR= 指定子によって指定されたステートメントに対して
転送が行われ、正の整数値が ios に割り当てられます。
+----------------------------------IBM 拡張----------------------------------+
ERR= か IOSTAT= 指定子が設定され、非同期データ転送中に
エラーが検出されると、対応する WAIT ステートメントの実行は要求されません。
END= か IOSTAT= 指定子が設定され、
非同期データ転送中にファイルの終わり条件が検出される場合、
対応する WAIT ステートメントを実行する必要はありません。
変換エラーが検出され、
CNVERR 実行時オプションが NO に設定されている場合、
IOSTAT= は設定されますが、
ERR= には分岐しません。
IOSTAT= も ERR= も指定していない場合は、以下のとおりです。
- 重大なエラーが検出されるとプログラムは停止します。
- 回復可能エラーが検出され、
ERR_RECOVERY 実行時オプションが YES に
設定されていると、プログラムは次のステートメントへと処理を継続します。
オプションが NO に設定されていると、プログラムは停止します。
- ERR_RECOVERY 実行時オプションが YES に設定されている場合、
変換エラーが検出されると、プログラムは次のステートメントへと処理を継続します。
CNVERR 実行時オプションが YES に設定されている場合、
変換エラーは回復可能エラーとして処理されます。一方、CNVERR=NO の場合、
エラーは変換エラーとして処理されます。
+------------------------------End of IBM 拡張-------------------------------+
例
INTEGER A(100)
CHARACTER*4 B
READ *, A(LBOUND(A,1):UBOUND(A,1))
READ (7,FMT='(A3)',ADVANCE='NO',EOR=100) B
·
·
·
100 PRINT *, 'end of record reached'
END
関連情報
