私はこれをするのが嫌いですが、この投稿で答えを見つけたいと思っていたら、先の道がはっきりしないと感じています. ですから、ここに進むべき道があります。
ショートバージョン
Fortran 77/90 では、標準の Fortran バイナリ ファイルを開くには、次のように記述します。
OPEN (5, FILE="myFile.txt")
しかし、Fortran 以外のフラットなバイナリ ファイルを開くには、次のように記述する必要があります。
OPEN(5, file="myFile.txt", form='unformatted', access='direct', recl=1)
この違いは、Fortran スタイルのバイナリ ファイルには、ファイル内の各「レコード」の周りに 4 バイトのヘッダーとフッターがあるためです。これらのヘッダー/フッターは、レコードに含まれるデータのサイズを表します。(最も一般的なケースでは、遭遇する各バイナリ ファイルには 1 つのレコードしかありません。)
ロングバージョン
Fortran は多くのデフォルトopen
引数を想定しています。実際、元の例を次の詳細な形式で記述して、想定されたすべてのデフォルトを表示できます。
OPEN (5, FILE="myFile.txt")
OPEN (5, FILE="myFile.txt", FORM="FORMATTED",
+ ACCESS="SEQUENTIAL", STATUS="UNKNOWN")
各引数を見てみましょう。
FORMは、ファイルがテキスト ( form='formatted'
) またはバイナリ データ ( form='unformatted'
) で構成されているかどうかを定義します。
ACCESSは、ファイルからデータを順番に読み取るaccess='sequential'
か ( )、任意の順序で読み取るか ( ) を定義しますaccess='direct'
。
RECLは、各レコードに入るバイト数を定義します。たとえばrecl=1
、レコード長はそれぞれ 1 バイトであるとだけ言っています。おそらく、それらは 1 バイトの整数です。
STATUSは、ファイルが既に存在するかどうかを定義します。引数は、ファイルがまだ存在しない可能性があるSTATUS="UNKNOWN"
ことを意味しますが、存在しない場合は作成されます。古いファイルを上書きする可能性を防ぎたい場合は、次を使用しますSTATUS="OLD"
。同様に、ファイルがまだ存在しないことがわかっている場合は、次を使用する必要がありますSTATUS="NEW"
。
詳細については:
これらの open ステートメントは、後続の read/write/close ステートメントにも影響を与えます。最初の投稿で、直接アクセス ファイルを開く場合は、直接アクセス ファイルに書き込む必要があることを知っておく必要がありました。(つまり、バイナリに含まれる Fortran ヘッダー/フッターはありません。) ただし、Fortran の既定の機能は、Fortran ヘッダーとフッターが含まれるシーケンシャル アクセス ファイルを作成することです。
open
Fortran 77/90 のステートメントの詳細については、次のオンライン リソースを参照してください。
Bishop University の Lin Jinsen による素敵なページ(ありがとうございます)。
コンパイラーに関する IBM の公式文書を少し追加したものです。