3

私は古い (1986 年頃) VAX VMS FORTRAN コードを c++ に移植する任務を負っていましたが、ちょっとした障害にぶつかりました。次の 2 行のコードは、計算された goto の一部です。

WRITE(2'N) (Y (I), I = 1, 5)
READ(2'N, ERR = 48) (Y (I), I = 1, 5)

私の問題は、それが実際にそれである場合、単位指定子 "2'N" です。「N」は、サブルーチンに渡される整数変数です。このパターンについてかなりの数のグーグル検索を行い、見つけた VMS ドキュメントを読みましたが、アポストロフィを使用してこのパターンに関する情報を見つけることができませんでした。write ステートメントと read ステートメントに続く暗黙の do ループは理解していますが、これが書き込み先と読み取り元の「場所」を理解していません。FORTRAN コードの残りの部分をブラウズしても、この呼び出しに関連する可能性のある unit=2 open ステートメントが明らかにならないため、ディスク ファイルではない可能性が高いと思われますが、確かではありません。ここにいる誰かが彼らの記憶に戻って私を助けてくれることを願っています.

4

1 に答える 1

3

VMS VAX FORTRAN のマニュアルを正しく読むと、 unit で -th レコードが'N指定されます。Clから。7.1.1.6「レコード指定子」:N2

レコード指定子は、相対編成のファイルでアクセスしたいレコードの番号を識別します。次のいずれかの形式を取ります。

REC = r
'r

r
アクセスするレコードの直接アクセス ファイル内の位置を表す値を持つ数値式です。[...]

これは標準準拠の Fortran ではないことに注意してください。ほとんどのコンパイラは、この構文を受け入れません。代わりに、次を使用しますREC=...

WRITE(2, REC=N) (Y (I), I = 1, 5)
READ(2, REC=N, ERR = 48) (Y (I), I = 1, 5)

unit のファイルを2明示的に開く必要はありません。これは、同じドキュメント Cl で指定されています。7.1.1.2「論理ユニット指定子」:

論理ユニット番号は、次の 2 つの方法のいずれかでファイルまたはデバイスに割り当てられます。

  • OPEN ステートメントを介して明示的に [...]
  • システムによって暗黙的に [...]

後者の場合、使用されるファイル名はCl で定義されます。4.2.2.1 VAX Fortran ユーザーマニュアルの「FORTRAN 論理名」 :

VAX FORTRAN は、次の形式で定義済みの論理名を提供します。

FOR0nn[.DAT]

[...]

例えば:

   WRITE (17,200)

明示的なファイル指定を含めずに上記のステートメントを入力すると、データは、デフォルト ディレクトリの下のデフォルト ディスク上の FOR017.DAT という名前のファイルに書き込まれます。

この場合、最近のほとんどのコンパイラはファイルを作成しますfort.nn

于 2016-05-23T18:14:59.717 に答える