レコード型の形式

固定長レコード

固定長レコードを指定すると、そのファイルの全レコードのバイト数が同一になります。固定長レコードを格納するファイルを開くときには、RECL 指定子を使用し、レコード長を指定する必要があります。シーケンシャル編成ファイルを直接アクセスするために開く場合には、ファイルのレコード位置を正確に計算できるように、固定長レコードを格納することが必要です。

相対ファイルの場合、固定長レコードの構成とオーバーヘッドは、-vms オプションを使用してコンパイルされたか、-vms オプションが省略されたかによって異なります。

-vms オプションが省略された相対ファイルでは (デフォルト)、各レコードには制御情報は含まれません。

-vms オプションが指定された相対ファイルでは、各レコードの先頭に 1 バイトの制御情報が含まれます。

次の図は、固定長レコードのレコード構成です:

可変長レコード

可変長レコードは、指定された最大レコード長まで任意のバイト数を含むことができ、シーケンシャル・ファイルにのみ適用されます。

可変長レコードは、長さフィールドを含む 4 バイトの制御情報が前後に追加されます。終端長さフィールドでは、BACKSPACE で効率的にレコードを戻ることができます。各長さフィールドに格納された 4 バイトの整数値は、その特定の可変長レコード中のデータバイト (オーバーヘッド・バイトを除く) の数を示します。

可変長レコードの文字カウント・フィールドは、Q 書式記述子を指定して READ 文を発行することでレコードの読み取り時に知ることができます。その後、このカウント・フィールドを使用し、I/O リストに何バイトが含まれているかを決定することができます

2 GB 未満の可変長レコード

次の図は、2 GB 未満の可変長レコードのレコード構成です:

2 GB を超える可変長レコード

2,147,483,639 バイトよりも大きなレコード長では、レコードはサブレコード に分けられます。サブレコードの長さは、1 から 2,147,483,639 までのいずれかです。

先頭長さフィールドの符号ビットは、後続のレコードがあるかないかを示します。終端長さフィールドの符号ビットは、前にサブレコードがあることを示します。符号ビットの位置は、ファイルのエンディアン形式により決定されます。

後続のサブレコードには、符号ビット値が 1 の先頭長さフィールドがあります。レコードを構成する最後のサブレコードには、符号値 0 の先頭長さフィールドがあります。前にサブレコードを持つサブレコードには、符号ビット 1 の終端長さフィールドがあります。レコードを構成する最初のサブレコードには、符号値 0 の終端長さフィールドがあります。符号ビットの値が 1 の場合、レコード長は 2 の補数表現で格納されます。

次の図は、2 GB を越す可変長レコードのレコード構成です:

通常、インテル® Fortran プログラムが可変長レコードを使用して書き出したファイルにはテキストファイルとしてアクセスすることはできません。可変長レコードを含むテキストファイルを出力する場合、代わりに Stream_LF レコード形式を使用してください。

セグメント・レコード

セグメント・レコード は、1 つのシーケンシャル編成ディスクファイル内に、1 つ以上の可変長書式なしレコードから構成される単一の論理レコード です。シーケンシャル・アクセスを使用してシーケンシャル編成ファイルに書き込まれた書式なしデータは、デフォルトではセグメント・レコードとして記憶されます。

セグメント・レコードは、例外的に長いレコードを書き込む必要がある場合で、1 つの長い可変長レコードを定義できない、または定義したくない場合に便利です。例えば、仮想メモリの制限によってプログラムが実行できないような場合です。より小さいセグメント・レコードを使用すれば、プログラムを実行するシステム上の仮想メモリの制限により問題が発生する可能性が減少します。

ディスクファイルでは、セグメント・レコードはセグメントで構成される単一の論理レコードです。各セグメントは、1 つの物理レコード です。セグメント (論理) レコードは、絶対最大レコード長 (21.4 億バイト) を超えることができますが、各セグメント (物理レコード) は、最大レコード長を超えることができません。

セグメント・レコードを含む書式なしシーケンシャル・ファイルにアクセスするには、ファイルを開く際に FORM='UNFORMATTED' および RECORDTYPE='SEGMENTED' を指定します。

次の図にように、セグメント・レコードの構成は、4 バイトの制御情報と、その後のユーザデータで構成されます。

制御情報は、2 バイト整数のレコード・サイズ・カウント (セグメント識別子に使用される 2 バイトを含む) と、その後の 2 バイトの整数のセグメント識別子で構成されます。セグメント識別子は、このセグメントが次のいずれであるかを示します:

識別子の値

指定セグメント

0

最初と最後のセグメントの間にあるいずれかのセグメント

1

第 1 セグメント

2

最終セグメント

3

単独セグメント

指定されたレコード長が奇数の場合、ユーザデータには空白が 1 つ (1 バイト) 埋め込まれますが、この余分なバイトは 2 バイト整数のレコード・サイズ・カウントには加算されません。

ストリーム・ファイル

ストリーム・ファイルは、レコードにグループ化されず、制御情報は含まれません。ストリーム・ファイル、CARRIAGECONTROL='NONE' を指定して使用され、入力文または出力文で指定された変数の範囲でのみ、読み出しされるまたは書き込まれる文字、あるいは 2 進数データを格納します。

次の図は、ストリーム・ファイルの構成です。

Stream_CR レコードと Stream_LF レコード

Stream_CR および Stream_LF レコードは、可変長レコードです。レコード長は、カウントによってではなく、データに埋め込まれた明示的なレコード区切り文字によって示されます。これらの区切り文字は、ストリーム形式のファイルにレコードを書き出したときに自動的に追加され、レコードを読み取ったときに削除されます。

Stream_CR と Stream_LF では、1 バイトの異なるレコード区切り文字を使用します:

次の図は、Stream_CR レコードおよび Stream_LF レコードの構成です: