3 回答

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

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
出于這個(gè)原因,我從未使用無格式輸出的順序訪問。但是它取決于應(yīng)用程序,有時(shí)候有一個(gè)記錄長度指示器(特別是非結(jié)構(gòu)化數(shù)據(jù))很方便。正如steabert在gnuplot上查看來自fortran的二進(jìn)制輸出所示,你可以通過使用關(guān)鍵字參數(shù)來避免這種ACCESS = 'DIRECT'
情況,在這種情況下你需要指定記錄長度。該方法便于有效存儲(chǔ)大型多維結(jié)構(gòu)化數(shù)據(jù)(恒定記錄長度)。下面的示例寫入一個(gè)大小等于數(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
請(qǐng)注意,從可移植性的角度來看,這不是理想的方法。在使用直接訪問編寫的無格式文件中,沒有關(guān)于每個(gè)元素大小的信息。描述數(shù)據(jù)大小的自述文本文件對(duì)我來說工作正常,我更喜歡這種方法而不是順序模式中的填充。

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