3 回答

TA貢獻1876條經(jīng)驗 獲得超7個贊
對于未格式化的IO,F(xiàn)ortran編譯器通常在記錄的開頭和結(jié)尾寫入記錄的長度。大多數(shù)但不是所有編譯器都使用四個字節(jié)。這有助于讀取記錄,例如,最后的長度有助于退格操作。您可以使用Fortran 2003的新Stream IO模式來抑制此問題,該模式是為了與其他語言兼容而添加的。在open語句中使用access ='stream'。

TA貢獻1790條經(jīng)驗 獲得超9個贊
出于這個原因,我從未使用無格式輸出的順序訪問。但是它取決于應(yīng)用程序,有時候有一個記錄長度指示器(特別是非結(jié)構(gòu)化數(shù)據(jù))很方便。正如steabert在gnuplot上查看來自fortran的二進制輸出所示,你可以通過使用關(guān)鍵字參數(shù)來避免這種ACCESS = 'DIRECT'
情況,在這種情況下你需要指定記錄長度。該方法便于有效存儲大型多維結(jié)構(gòu)化數(shù)據(jù)(恒定記錄長度)。下面的示例寫入一個大小等于數(shù)組大小的無格式文件:
REAL(KIND=4),DIMENSION(10) :: a = 3.141INTEGER :: reclenINQUIRE(iolength=reclen)aOPEN(UNIT=10,FILE='direct.out',FORM='UNFORMATTED',& ACCESS='DIRECT',RECL=reclen)WRITE(UNIT=10,REC=1)aCLOSE(UNIT=10)END
請注意,從可移植性的角度來看,這不是理想的方法。在使用直接訪問編寫的無格式文件中,沒有關(guān)于每個元素大小的信息。描述數(shù)據(jù)大小的自述文本文件對我來說工作正常,我更喜歡這種方法而不是順序模式中的填充。

TA貢獻1784條經(jīng)驗 獲得超8個贊
Fortran IO是基于記錄的,而不是基于流的。每次通過您寫東西時,write()
不僅要寫入數(shù)據(jù),還要記錄該記錄的開始和結(jié)束標(biāo)記。兩個記錄標(biāo)記都是該記錄的大小。這就是為什么在一次寫入中寫入一堆實數(shù)(一個記錄:一個開始標(biāo)記,一堆實數(shù),一個結(jié)束標(biāo)記)具有不同的大小,相對于在單獨的寫入中寫入每個實數(shù)(多個記錄,每個一個開始標(biāo)記,一個真實標(biāo)記和一個結(jié)束標(biāo)記。如果你寫下大型矩陣,這是非常重要的,因為如果寫得不正確,你可能會占據(jù)職業(yè)。
添加回答
舉報