内部ファイルは、変数、部分列、配列、配列要素、構造化レコードの欄のような、CHARACTER 型のオブジェクトです。内部ファイルからの READ の場合は、文字列の定数であってもかまいません。内部ファイルにおける入出力は、データをある文字実体からほかのデータ実体に転送し、変換することによって、書式付き READ と WRITE 文をシミュレートします。ファイルの入出力は実行されません。
内部ファイルを使用するときには
WRITE 文では、装置番号の代わりに、データを受け取る文字実体の名前が現れます。 READ 文では、装置番号の代わりに、文字実体のソースの名前が現れます。
ファイル中の 1 つのレコードは、定数、変数、部分列のいずれかの実体から構成されます。
配列実体の場合、個々の配列要素が 1 つのレコードに対応します。
内部ファイルへの直接探査入出力。Fortran 95 の規格では、内部ファイルに許可されているのは順番書式付き入出力だけです。これは、外部ファイルに対する直接探査入出力と似ていますが、ファイルにあるレコード数を変更できない点が異なります。この場合、レコードは、文字列の配列の 1 つの要素です。 この規格外の拡張機能を利用できるのは、FORTRAN 77 互換モードで -f77 を使用してコンパイルした場合だけです。
順番探査の READ または WRITE 文は、内部ファイルの先頭から処理を始めます。
例: 内部ファイルから書式付きで順番に読み取ります (1 レコードのみ)。
demo% cat intern1.f CHARACTER X*80 READ( *, '(A)' ) X READ( X, '(I3,I4)' ) N1, N2 ! 内部ファイル X を読み取る WRITE( *, * ) N1, N2 END demo% f95 -o tstintern intern1.f demo% tstintern 12 99 12 99 demo% |
例: 内部ファイルから書式付きで順番に読み取ります (3 レコード)。
demo% cat intern2.f CHARACTER LINE(4)*16 DATA LINE(1) / ' 81 81 ' / DATA LINE(2) / ' 82 82 ' / DATA LINE(3) / ' 83 83 ' / DATA LINE(4) / ' 84 84 ' / READ( LINE,'(2I4)') I,J,K,L,M,N PRINT *, I, J, K, L, M, N END demo% f95 intern2.f demo% a.out 81 81 82 82 83 83 demo% |
例: 内部ファイルから -f77 互換モードで直接探査により読み取ります (1 レコード)。
demo% cat intern3.f CHARACTER LINE(4)*16 DATA LINE(1) / ' 81 81 ' / DATA LINE(2) / ' 82 82 ' / DATA LINE(3) / ' 83 83 ' / DATA LINE(4) / ' 84 84 ' / READ ( LINE, FMT=20, REC=3 ) M, N 20 FORMAT( I4, I4 ) PRINT *, M, N END demo% f95 -f77 intern3.f demo% a.out 83 83 demo% |