3 回答

TA貢獻(xiàn)1799條經(jīng)驗 獲得超8個贊
Fortran未格式化的文件格式
我不明白fortran中未格式化文件的格式。
例如:
open (3,file=filename,form="unformatted",access="sequential")write(3) matrix(i,:)
將矩陣列輸出到文件中。我發(fā)現(xiàn)它在兩端填充了4個字節(jié)的文件,但是我真的不明白為什么,或者如何控制這種行為。有沒有辦法刪除填充?
謝謝

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊
出于這個原因,我從未使用無格式輸出的順序訪問。但是它取決于應(yīng)用程序,有時候有一個記錄長度指示器(特別是非結(jié)構(gòu)化數(shù)據(jù))很方便。正如steabert在gnuplot上查看來自fortran的二進(jìn)制輸出所示,你可以通過使用關(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貢獻(xiàn)1877條經(jīng)驗 獲得超1個贊
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è)。
- 3 回答
- 0 關(guān)注
- 1205 瀏覽
添加回答
舉報