Microsoft Fortran PowerStation との互換性のために /fpscomp オプションを使用するときには,次の形式のファイルが使用できます。
書式付き順番編成ファイルは,ファイル内の順序で順番に書き出され,順番に読み取られる書式付き記録の並びです。記録の長さは可変であり,空であってもかまいません。これらは次図に示すように,復帰 (0D) および改行 (0A) 文字で区切られています。
書式付き順番編成ファイルの書式付き記録
次に,3 つの記録を書式付き順番編成ファイルに書き出すプログラムの例を示します。結果として得られたファイルを次図に示します。
OPEN (3, FILE='FSEQ') ! FSEQ は,基本の書式付き順番編成ファイルです。 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' は出力には影響を与えません。
次に,2 つの記録,記録 1 と記録 3 を書式付き直接ファイルに書き出すプログラムの例を示します。その結果を次図に示します。
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
書式付き直接ファイル
書式なし順番編成ファイルは,プラットフォームによっていくぶん異なる編成になります。この節では,Visual Fortran で /fpscomp オプション (たとえば,/fpscomp:(ioformat,general)) が指定された場合に作成される書式なし順番編成ファイルについて説明します。ファイルを異なる方法で編成する別のプラットフォームからファイルに探査する場合,「書式なし数値データの変換」を参照するか,...\DF98\SAMPLES\TUTORIAL フォルダにある UNFSEQ.F90 変換ユーティリティを使用してください。
書式なし順番編成ファイル内の記録は可変長です。書式なし順番編成ファイルは,130 バイト以下の物理ブロックと呼ばれる単位として編成されています。個々の物理ブロックは,ファイルに送られた (128 バイトまでの) データと,コンパイラが挿入する 2 つの 1 バイトの長さバイトから構成されます。長さバイトは,各記録がどこで始まり,どこで終わるのかを示しています。
論理記録とは,1 つまたは複数の物理ブロックを含んでいる書式なし記録のことです (次の図を参照)。論理記録は任意の大きさにすることができます。コンパイラは必要な数の物理ブロックを使用します。
複数の物理ブロックから構成される論理記録を作成するとき,コンパイラは長さバイトを 129 に設定して,現在の物理ブロックのデータが次の物理ブロックに継続されることを示します。たとえば,140 バイトのデータを書き出すと,論理記録の構造は次図のようになります。
書式なし順番編成ファイルの論理記録
書式なし順番編成ファイルの最初と最後のバイトは予約されています。最初のバイトは値 75 を,最後のバイトは値 130 を含んでいます。Fortran はこれらのバイトをエラー検証とファイル終了の参照に使用します。
次のプログラムは,次図に示す書式なし順番編成ファイルを作成します。
! 注意:このファイルは基本順番編成 ! -1 は 16 進では FF FF FF FF です。 CHARACTER xyz(3) INTEGER(4) idata(35) DATA idata /35 * -1/, xyz /'x', 'y', 'z'/ ! ! ファイルを開き,140 バイトの記録を書き出します: ! IDATA に 128 バイト (ブロック) + 12 バイト = 140 が書き出されます。 ! XYZ に 3 バイトが書き出されます。 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
書式なし直接ファイル
2 進順番編成ファイルは,同じ順序で読み書きされ,2 進数として格納される値の並びです。記録境界は存在せず,ファイル構造を指示する特殊なバイトもありません。データは形式と長さを変更せずに読み書きされます。任意の I/O データ項目について,メモリー内のバイト並びは,ファイル内のバイト並びと一致します。
次のプログラムは,次図に示す 2 進順番編成ファイルを作成します。
! 注意:07 はベル文字です。 ! 順番編成が基本として仮定されています。 ! INTEGER(1) bells(4) CHARACTER(4) wys(3) CHARACTER(4) cvar DATA bells /4*7/ DATA cvar /' is '/,wys /'What',' you',' see'/ OPEN (3, FILE='BSEQ',FORM='BINARY') WRITE (3) wys, cvar WRITE (3) 'what ', 'you get!' WRITE (3) bells CLOSE (3) END
2 進順番編成ファイル
2 進直接ファイルは,任意の順序で格納できる一連の 2 進数として記録を格納します。ファイル内のすべての記録は,OPEN 文の RECL 引数で指定された同じ長さを持っています。2 進直接ファイルには部分的な記録を書き出すことができます。記録の未使用の部分は不定データを含むことになります。
1 回の読み取りまたは書き出し操作は,操作をファイル内の次の記録に継続することで,1 つの記録が含むことができるよりも多くのデータを転送することができます。このような操作を書式なし直接ファイルに対して行うと,エラーが発生します。書式なし直接ファイルに対して行われる有効な I/O 操作は,その操作が部分記録の中でのゼロの充填に依存していない限り,2 進直接ファイルに対して行われたときと同じ結果を生成します。
次のプログラムは,次図に示す 2 進直接ファイルを作成します。
OPEN (3, FILE='BDIR',RECL=10,FORM='BINARY',ACCESS='DIRECT') WRITE (3, REC=1) 'abcdefghijklmno' WRITE (3) 4,5 WRITE (3, REC=4) 'pq' CLOSE (3) END
2 進直接ファイル