インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
レコードアクセスは、ファイル編成に関係なく、レコードがどのようにファイルから読み取られ、またどのようにファイルへ書き込まれるのかを示します。レコードアクセスは、ファイルを開くたびに指定され、毎回異なるレコードアクセスが指定される場合もあります。使用可能なレコードアクセスの種類は、ファイル編成とレコード型に依存します。
例えば、次のように指定します。
ORGANIZATION= 'SEQUENTIAL' および POSITION= 'APPEND' (または ACCESS= 'APPEND') を使用して、シーケンシャル・ファイルにレコードを追加できます。
複数の WRITE 文を使用してレコードを順番に追加し、一度ファイルを閉じて、ORGANIZATION= 'SEQUENTIAL' および ACCESS= 'SEQUENTIAL' (シーケンシャル・ファイルに固定長のレコードが含まれている場合は、ACCESS= 'DIRECT') を使用して、再びファイルを開くことができます。
シーケンシャル・アクセスは、ファイルおよびターミナルなどの 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 ! 開始位置は行の最初のバイト READ (12, POS=200) X, Y ! バイト 200 から読み取る READ (12) A, B ! 以前の READ が停止した位置から読み取る
INQUIRE の POS= 指定子は、ファイルの現在のバイト位置を特定するのに使用できます。
RECORDTYPE= 指定子はストリームアクセスでは無視されます。
シーケンシャル・ファイルおよび相対ファイルに対して、シーケンシャル・アクセス・モードと直接アクセスモードを使用することができます。ただし、シーケンシャル編成ファイルへの直接アクセスは、ファイルがディスク上に格納されていて、さらに固定長のレコードを含む場合のみ可能です。
次の表は、ファイル編成とレコード型の組み合わせで使用可能なアクセスの種類の要約です。
レコード型 |
シーケンシャル・アクセス |
直接アクセス |
---|---|---|
シーケンシャル・ファイル編成 |
||
固定長 |
〇 |
〇 |
可変長 |
〇 |
× |
セグメント |
〇 |
× |
Stream |
〇 |
× |
Stream_CR |
〇 |
× |
Stream_LF |
〇 |
× |
Stream_CRLF |
〇 |
× |
相対ファイル編成 |
||
固定長 |
〇 |
〇 |
直接アクセスを行うには、ファイルがディスクデバイスに格納されている必要があります。また、相対ファイルも、アクセスモードの種類に関係なく、ディスクデバイスに格納されている必要があります。