インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
Fortran は、次の 3 種類のファイルアクセス方法をサポートします。
シーケンシャル
直接アクセス
ストリーム
Fortran は、次の 3 種類のファイル構造をサポートします。
書式付き
書式なし
バイナリー
シーケンシャル・アクセス・ファイルおよび直接アクセスファイルは、上記のいずれかのファイル構造になります。ストリーム・アクセス・ファイルは書式付きまたは書式なしのファイル構造になります。
個々のファイルの種類にはそれぞれ利点があり、開発しているアプリケーションに応じて、最適な種類を選択してください。
書式付きファイル
書式付きファイルを作成するには、FORM='FORMATTED' オプションを使用してファイルを開くか、シーケンシャル・ファイルを作成するときに FORM 引数を省略します。書式付きファイルのレコードは ASCII 文字として格納されます。つまり、通常はバイナリー形式で格納される数値が ASCII 形式に変換されます。個々のレコードは、ASCII のキャリッジリターン (CR)、ラインフィード (LF) 文字で終わります。
データファイルの内容を表示する場合は、書式付きファイルを使用します。書式付きファイルは、テキストエディターにロードでき、その内容を直接読むことができます。数値は数値のように見え、文字列は文字列のように見えます (書式なしファイルやバイナリーファイルは、すべてが 16 進文字の集まりのように見えます)。
書式なしファイル
書式なしファイルを作成するには、FORM='UNFORMATTED' オプションを使用してファイルを開くか、直接アクセスファイルを作成するときに FORM 引数を省略します。書式なしファイルは、物理ブロックから構成される一連のレコードです。個々のレコードには、一連の値がプログラムメモリー内で使用されるのと似た表現で格納されます。入出力の際には、変換はほとんど必要ありません。
これらのファイルには書式がないため、同じ情報を書式付きで格納しているファイルよりも高速に参照することができ、ファイルのサイズもより小さくなります。しかし、ファイルに数値が含まれていても、テキストエディターでその数値を読むことはできません。
バイナリーファイル
バイナリーファイルを作成するには、FORM='BINARY' を指定します。対応する内部レコード形式がないことを除けば、バイナリーファイルは書式なしファイルと似ています。
シーケンシャル・アクセス・ファイル
シーケンシャル・ファイル内のデータを参照するには、(REWIND 文または BACKSPACE 文でファイル内の位置を変更しない限り) 個々のレコードを 1 つずつ順番に参照する必要があります。\ノンアドバンシング I/O、リスト指定 I/O、およびネームリスト I/O を含む一部の I/O 方式は、シーケンシャル・ファイルでしか使用できません。また、内部ファイルもシーケンシャル・ファイルでなければなりません。シーケンシャル・デバイスに関連付けられたファイルに対しては、シーケンシャル・アクセスを使用する必要があります。
シーケンシャル・デバイスとは、(読み取りまたは書き込み以外の) 明示的な動作を許容しない物理記憶域デバイスです。キーボード、スクリーン、およびプリンターはいずれもシーケンシャル・デバイスです。
直接アクセスファイル
直接アクセスファイル内のデータは、任意の順序で読み書きできます。レコードは、レコード番号 1 から始まり、順番に番号付けされています。すべてのレコードは、OPEN 文の RECL オプションで指定されたレコード長を持ちます。直接ファイル内のデータは、ファイル内の目的のレコードを指定することにより参照できます。ランダムアクセス I/O が必要な場合は、直接アクセスファイルを使用します。よく知られているランダムアクセス・アプリケーションの例として、データベースが挙げられます。
ストリーム・アクセス・ファイル
ストリームアクセス I/O は、レコード構造体を参照することなくファイルにアクセスする方法です。ストリームアクセスでは、ファイルは連続したバイトの並びとして認識され、1 から始まる正の整数によってアドレス指定されます。
ストリームアクセスを有効にするには、ファイルの OPEN 文で ACCESS='STREAM' を指定します。STREAM= 指定子を INQUIRE 文で使用し、STREAM がファイルのアクセス方法としてリストされているかどうかを調べることができます。YES、NO、または UNKNOWN が返されます。
ストリームアクセス用に有効にされたファイルは、開始位置が 1 のファイル記憶単位 (通常はバイト) によって位置が設定されます。現在の位置を確認するには、POS= 指定子を INQUIRE 文に使用します。POS= 指定子で read 文または write 文に必要な位置を示すことができます。
ストリームアクセスは、書式付きまたは書式なしのいずれかです。
書式付きストリームアクセスで接続されたときは、外部ファイルには次のような特性があります。
最初のファイル記憶単位の位置は 1 です。連続したファイル記憶単位の位置関係は、プロセッサーに依存します。正の整数がすべて有効な位置に対応する必要はありません。
ファイル記憶単位には、レコードマーカーが含まれるものがあります。これにより、ファイルはストリーム構造のほかにレコード構造も持ちます。ファイルの終わりにレコードマーカーがない場合は、最終レコードは不完全なものになります。レコードマーカーのない空のレコードの書き込みは無効です。
書式なしストリームアクセスで接続されたときは、外部ファイルには次のような特性があります。
最初のファイル記憶単位の位置は 1 です。後続の各ファイル記憶単位の位置は、直前のファイル記憶単位よりも 1 多くなります。
ファイルの位置指定が可能な場合、ファイル記憶単位の読み取りまたは書き込みを位置順に行う必要はありません。例えば、ファイル記憶単位の位置 1 に書き込みがなくても、ファイル記憶単位の位置 2 に書き込むことができます。
ファイル作成以降に記憶単位が書き込まれ、READ 文が許可されている限り、ファイルに接続されている間はファイルからどの記憶単位でも読み取ることができます。
書式なしストリームでは、BACKSPACE は使用できません。