レコードアクセス

レコードアクセス は、ファイル編成に関係なく、レコードがどのようにファイルから読み取られ、またどのようにファイルへ書き込まれるのかを示します。レコードアクセスは、ファイルを開くたびに指定され、毎回異なるレコードアクセスが指定される場合もあります。使用可能なレコードアクセスの種類は、ファイル編成とレコード型に依存します。

例えば、レコードアクセスを使用すると次のことが可能です。

シーケンシャル・アクセス

シーケンシャル・アクセスは、ファイルおよびターミナルなどの I/O デバイスへ、レコードを順番に読み書きします。シーケンシャル I/O は、サポートされたファイル編成とレコード型ならどのような種類でも使用できます。

シーケンシャル編成または相対編成を持つファイルに対して、シーケンシャル・アクセス・モードを指定した場合、レコードは、ファイルの先頭から 1 つずつ読み書きされます。特定のレコードの読み取りは、その前にあるすべてのレコードが読み出された後に行われます。また、新規のレコードは、ファイルの終わりにしか書き込めません。

直接アクセス

直接アクセスは、レコード番号で指定したレコードを、ディスク上にある固定長のレコード型を含むシーケンシャル・ファイルまたは相対ファイルへ読み書きします。

直接アクセスモードを選択すると、レコードを読み書きする順番を決定できます。各 READ 文または WRITE 文には、読み取りまたは書き込みを行うレコードの相対レコード番号が含まれていなければなりません。

シーケンシャル・ディスク・ファイルへの直接的なアクセスは、固定長のレコードが含まれている場合のみ可能です。直接アクセスは、セル番号を使用してレコードを検索するため、以前要求したレコードよりも前または後ろにあるレコードを要求するために、READ 文または WRITE 文を連続的に使用できます。例えば、以下のサンプルコードでは、最初の READ 文でレコード 24 を読み取り、2 番目の READ 文でレコード 10 を読み取っています。

READ (12,REC=24) I
READ (12,REC=10) J

ストリームアクセス

ストリームアクセスは、レコード区切り文字に到達するまで、あるいは指定されたバイト数が読み取りまたは書き込まれるまで順番にレコードからバイトを転送します。書式付きストリームレコードは、新規行文字で終了します。書式なしストリームデータにはレコード区切り文字は含まれません。ファイルからの読み取りまたはファイルへの書き込みをバイト位置によって行うことができます。ファイルの先頭バイト位置は、1 です。次に、例を示します。

OPEN (UNIT=12, ACCESS=’STREAM’)
READ (12) I, J, K              ! start at the first byte of the file
READ (12, POS=200) X, Y       ! then read staring at byte 200
READ (12) A, B            ! then read starting where the previous READ stopped

The POS= specifier on INQUIRE can be used to determine the current byte position in the file.

Note icon

RECORDTYPE= 指定子はストリームアクセスでは無視されます。

ファイル編成とレコード型によるレコードアクセスの制限

シーケンシャル・ファイルおよび相対ファイルに対して、シーケンシャル・アクセス・モードと直接アクセスモードを使用することができます。ただし、シーケンシャル編成ファイルへの直接アクセスは、ファイルがディスク上に格納されていて、さらに固定長のレコードを含む場合のみ可能です。

次の表は、ファイル編成とレコード型の組み合わせで使用可能なアクセスの種類の要約です。

レコード型

シーケンシャル・アクセス

直接アクセス

シーケンシャル・ファイル編成

固定長

可変長

X

セグメント

X

Stream

X

Stream_CR

X

Stream_LF

X

Stream_CRLF

X

相対ファイル編成

固定長

Note icon

直接アクセスを行うには、ファイルがディスクデバイスに格納されている必要があります。また、相対ファイルも、アクセスモードの種類に関係なく、ディスクデバイスに格納されている必要があります。