ファイル編成とは,記録が記憶装置上にどのように物理的に配置されるかを示す言葉です。
記録形式とは,ファイルに含まれる記録がすべて同じ長さなのか,可変長なのか,または 1 つの記録が終了し,別の記録が始まる場所を定義するために他の規則を使っているのかを示す言葉です。
記録探査とは,ファイルの編成にかかわらず,ファイルから記録を読み取ったり,ファイルに記録を書き出すために使われる方式のことです。ファイル編成は,そのファイル中の記録が探査される方式を必ずしも決定しません。
Fortran は,順番編成と相対編成の 2 種類のファイル編成をサポートしています。ファイル編成は,OPEN 文の ORGANIZATION 指定子によって指定されます。相対編成ファイルは,ディスク上に格納されなくてはなりません。ただし,順番編成ファイルは,磁気テープとディスクのどちらにも格納できます。ターミナル,パイプ,カードリーダ,ラインプリンタなどの他の周辺機器は,順番編成ファイルとして扱われます。
順番編成ファイルは,ファイルに書き出される順番に配置された記録から構成されます。1 番目に書き出される記録はファイル内の 1 番目の記録,2 番目に書き出される記録は,ファイル内の 2 番目の記録,以下同様です。このため,記録の追加は,ファイル終了にしかできません。ファイル終了以外の場所に記録を追加しようと試みると,直前に書き出した記録終了が切り捨てられます。
相対編成ファイル中には,セルと呼ばれる番号付きの位置があります。これらのセルは長さが固定されており,1 を最初のセル,n をファイル内の最後のセルとして,1 ~ n の連続した番号が付けられています。個々のセルは,1 つの記録を含んでいるか空であるかのどちらかです。相対編成ファイル中の記録は,セル番号に従って探査されます。セル番号は記録の相対編成記録番号で,その記録のファイルの先頭を基準とした相対位置を示しています。相対編成記録番号を指定することで,記録の位置にかかわらず,直接に取得,追加,または削除を行うことができます。(削除された記録の検出は,プログラムをコンパイルする時に /vms オプションを指定していないと行えません。)
Fortran は,2 つのファイル探査方式 (順番と直接),および 3 種類のファイル構造 (書式付き,書式なし,および 2 進) をサポートしています。順番探査ファイルと直接探査ファイルは,この 3 種類のどれかのファイル構造を持つことができます。つまり,次の種類のファイルが存在します。
書式付き順番
書式付き直接
書式なし順番
書式なし直接
2 進順番
2 進直接
個々のファイルの種類にはそれぞれ利点があり,どれが最適かは開発しているアプリケーションに依存します。
書式付きファイルを作成するには,FORM='FORMATTED' オプションを使用して開くか,順番編成ファイルを作成するときに FORM パラメタを省略します。書式付きファイルの記録は ASCII 文字として格納されます。通常ならば 2 進形式で格納される数値は ASCII 書式に変換されます。個々の記録は,ASCII の復帰 (CR) および改行 (LF) 文字で終わります。
データ・ファイルの内容を見る必要がある場合,書式付きファイルを使用します。書式付きファイルは,テキスト・エディタにロードし,その内容を直接に読むことができます。つまり,数値は数値のように見え,文字列は文字列のように見えます。一方,書式なしファイルや 2 進ファイルは,すべてが 16 進文字集合のように見えます。
書式なしファイルを作成するには,FORM='UNFORMATTED' オプションを使用して開くか,直接探査ファイルを作成するときに FORM パラメタを省略します。書式なしファイルは,物理ブロックから構成される記録の並びです。個々の記録は,プログラム・メモリー中で使用されるのと似た表現で格納された値の並びを含んでいます。入出力の際には,変換はほとんど必要ありません。
書式がないため,これらのファイルは,同じ情報を書式付きで格納しているファイルよりも高速に探査することができ,大きさも小さくなります。しかし,ファイルに数値が含まれている場合,テキスト・エディタを使ってその数値を読むことはできません。
2 進ファイルを作成するには,FORM='BINARY' を指定します。2 進ファイルは最もコンパクトで,大量のデータを格納するのに適しています。
順番編成ファイル内のデータに探査するためには,(REWIND または BACKSPACE 文でファイル内の位置を変更しない限り) 個々の記録を 1 つずつ探査していく必要があります。停留 I/O,並び I/O,および変数群 I/O を含めて,一部の I/O 方式は順番編成ファイルでしか使用できません。内部ファイルも順番編成ファイルでなくてはなりません。順番編成装置に関連付けられたファイルに対しては順番探査を使用する必要があります。
順番装置は,(読み取りまたは書き出し以外の) 明示的な移動を許容しない物理記憶装置です。キーボード,画面,プリンタはいずれも順番装置です。
直接探査ファイル内のデータは,任意の順序で読み書きできます。記録は,記録番号 1 から始まって順番に番号付けされています。すべての記録が,OPEN 文の RECL 指定子で指定された長さを持っています。直接ファイル中のデータへの探査は,ファイル内の目的の記録を指定することによって行います。ランダム探査 I/O が必要な場合は,直接探査ファイルを使用します。ランダム探査アプリケーションの例としては,データベースが挙げられます。
すべてのファイルは,記録で構成されています。個々の記録は,ファイル内の 1 つの項目です。これはターミナルからの行である場合もありますし,磁気テープまたはディスク・ファイル上の論理記録である場合もあります。1 ファイル中のすべての記録は同じ形式です。
Fortran では,記録に書き出されるバイト数は記録長と同じであるか,それよりも小さくなくてはなりません。個々の書式なし READ または WRITE 文ごとに 1 つの記録が読み書きされます。書式付き READ または WRITE 文は,斜線 (/) 形編集記述子を使って複数の記録を転送することができます。
2 進ファイルでは,1 つの READ または WRITE 文は,転送されるバイト数に対応するために必要な数の記録を読み書きします。出力時には,不完全な書式付き記録には空白が充填されます。不完全な書式なしおよび 2 進記録には,不定バイト (ゼロ) が充填されます。
関連情報