Microsoft* Fortran PowerStation* との互換性のために、-fpscomp オプションを使用する際には、次の形式のファイルが使用できます:
書式付きシーケンシャル・ファイル
書式付き直接ファイル
書式なしシーケンシャル・ファイル
書式なし直接ファイル
書式付きシーケンシャル・ファイルは、ファイル内の順序で、順に書き出され、また順に読み取られる一連の書式付きレコードです。レコードの長さはさまざまで、また空の場合もあります。次の図のように、レコードはキャリッジ・リターン (0D) 文字やラインフィード (0A) 文字で区切られます。
書式付きシーケンシャル・ファイル 内の書式付きレコード
次に、書式付きシーケンシャル・ファイルに 3 つのレコードを書き出すプログラムの例を示します。また、続く図は結果として得られるファイルを示します。
OPEN (3, FILE='FSEQ') ! FSEQ is a formatted sequential file by default. WRITE (3, '(A, I3)') 'RECORD', 1 WRITE (3, '()') WRITE (3, '(A11)') 'The 3rd One' CLOSE (3) END
書式付きシーケンシャル・ファイル
書式付き直接ファイルでは、すべてのレコードは同じ長さで、任意の順序で読み取りや書き込みを行なうことができます。レコードのサイズは、OPEN 文の RECL オプションで指定され、最も長いレコードのバイト数と等しいか、またはそれ以上でなくてはなりません。
キャリッジ・リターン (CR) 文字およびラインフィード (LF) 文字は、レコードの区切り子で、RECL 値には含まれません。直接アクセスのレコードがいったん書き出されると、削除はできませんが、書き換えは可能です。
書式付き直接ファイルへの出力中、レコードがデータで満たなかった場合には、コンパイラはレコードの残りの部分に空白を挿入します。この空白の挿入により、ファイルにはすべて同じ長さの、完全に満たされたレコードだけが含まれることになります。また、入力時に、レコードに含まれるデータよりも多くのデータが入力リストと書式に必要な場合、コンパイラはデフォルトで入力レコードに空白を追加します。
ファイルの OPEN 文で PAD='NO' を設定すると、デフォルトの空白の挿入設定を上書きすることができます。PAD='NO' と設定されている場合、入力レコードには入力リストと書式の仕様で指定されているデータ量が含まれなければなりません。データ量が異なる場合には、エラーとなります。PAD='NO' の設定は、出力には影響しません。
次の例は、レコード 1 とレコード 3 の 2 つのレコードを書式付き直接ファイルに書き出すプログラム例です。また、続く図はその結果です。
OPEN (3,FILE='FDIR', FORM='FORMATTED', ACCESS='DIRECT',RECL=10) WRITE (3, '(A10)', REC=1) 'RECORD ONE' WRITE (3, '(I5)', REC=3) 30303 CLOSE (3) END
書式付き直接ファイル
書式なしシーケンシャル・ファイルは、プラットフォームにより、編成が少し異なります。このセクションでは、-fpscomp オプション (-fpscomp ioformat など) が指定された場合に、インテル® Fortran コンパイラにより作成される書式なしシーケンシャル・ファイルについて説明します。異なるファイル編成を行うプラットフォームからファイルにアクセスする場合は、「書式なしデータの変換の概要」を参照してください。
書式なしシーケンシャル・ファイル内のレコードは長さが異なります。書式なしシーケンシャル・ファイルは、130 バイト以下の物理ブロックと呼ばれる単位として編成されています。個々の物理ブロックは、ファイルに送信された (128 バイトまでの) データとコンパイラが挿入する 2 つの 1 バイトの "長さバイト" から構成されます。長さバイトは、各レコードの開始位置と終了位置を示します。
論理レコード とは、1 つまたは複数の物理ブロックを含む書式なしレコードを示します。(次の図を参照) 論理レコードの大きさは任意です。コンパイラは、必要な数の物理ブロックを使用します。
複数の物理ブロックから構成される論理レコードを作成する際、コンパイラは長さバイトを 129 に設定して、現在の物理ブロックのデータが次の物理ブロックに継続されることを示します。例えば、140 バイトのデータを書き出すと、論理レコードの構造は次の図のようになります。
書式なしシーケンシャル・ファイルの論理レコード
書式なしシーケンシャル・ファイルの最初と最後のバイトは予約されています。最初のバイトには値 75 を、最後のバイトには値 130 が含まれています。Fortran は、これらのバイトをエラーチェックとファイル終了の参照に使用します。
次のプログラムは、続く図で示される書式なしシーケンシャル・ファイルを作成します。
! Note: The file is sequential by default ! -1 is FF FF FF FF hexadecimal. ! CHARACTER xyz(3) INTEGER(4) idata(35) DATA idata /35 * -1/, xyz /'x', 'y', 'z'/ ! ! Open the file and write out a 140-byte record: ! 128 bytes (block) + 12 bytes = 140 for IDATA, then 3 bytes for XYZ. OPEN (3, FILE='UFSEQ',FORM='UNFORMATTED') WRITE (3) idata WRITE (3) xyz CLOSE (3) END
書式なしシーケンシャル・ファイル
書式なし直接ファイルは、一連の書式なしレコードです。レコードの読み書きは任意の順序で行うことができます。すべてのレコードは、OPEN 文の RECL で指定子で指定された同じ長さです。レコードを区切ったり、レコードの構造を指示する区切りバイトはありません。
書式なし直接ファイルには部分的なレコードを書き出すことができます。インテル Visual Fortran は、ASCII のヌル文字を使用し、これらのレコードを固定レコード長まで埋めます。ファイル内の書き出されなかったレコードには未定義のデータが含まれます。
次のプログラムでは、続く図のようなサンプルの書式なし直接ファイルを作成します。
OPEN (3, FILE='UFDIR', RECL=10,& & FORM = 'UNFORMATTED', ACCESS = 'DIRECT') WRITE (3, REC=3) .TRUE., 'abcdef' WRITE (3, REC=1) 2049 CLOSE (3) END
書式なし直接ファイル