2016-05-23 35 views
3

我的任務是將一些舊的(大約1986年)VAX VMS FORTRAN代碼移植到C++中,並且遇到了一些絆腳石。以下兩行代碼是計算出的goto的一部分。vms fortran讀寫單元指定

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

我的問題是單位指示符「2'N」,如果這確實是什麼。 「N」是一個傳遞給子程序的整型變量。我已經爲這種模式進行了相當多的谷歌搜索,並閱讀了我能找到的VMS文檔,但一直無法找到任何有關這種模式的信息。我理解遵循寫和讀語句的暗示的循環,但我不明白這是寫入和讀取的位置。瀏覽其餘的FORTRAN代碼並不會顯示可能與此調用相關聯的unit = 2 open語句,因此它似乎不是磁盤文件,但我不確定。我希望這裏有人能回到他們的記憶並幫助我。

回答

3

如果我正確閱讀VMS VAX FORTRAN manual,則'N指定N單元2中的第 - 個記錄。 來自Cl。 7.1.1.6「記錄說明符」:

記錄說明符標識您希望在具有相關組織的文件中訪問的記錄的編號。它採用以下兩種形式之一:

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) 

文件在單元2不需要打開明確。這在同一文件Cl中有詳細說明。 7.1.1.2「邏輯單元指定符」:

邏輯單元號碼被分配給一個文件或設備中的兩種方法之一:

  • 明確槽OPEN語句[...]
  • 由系統隱式[...]

在後者的情況下,使用的文件名中Cl. 4.2.2.1 "FORTRAN Logical Names" of the VAX Fortran user manual定義:

VAX FORTRAN提供預定義的邏輯名稱在 以下形式:

FOR0nn[.DAT] 

[...]

例如:

WRITE (17,200) 

如果輸入上述語句不包括 明確文件規範,數據被寫入到您的默認 目錄下一個名爲默認的磁盤上 FOR017.DAT文件。

在這種情況下,大多數現代編譯器將創建一個文件fort.nn

+0

謝謝!現在它變得更有意義。也感謝指導手冊的鏈接。代碼中有一處顯式打開文件,顯示爲unit4,「ELIBn.DAT」,文件目錄位置具有編號爲1至9的文件。我可以從這裏找出其餘部分。 –