为了账号安全,请及时绑定邮箱和手机立即绑定

请教Fortran未格式化的文件格式

/ 猿问

请教Fortran未格式化的文件格式

皈依舞 2019-09-04 13:05:56

Fortran未格式化的文件格式

我不明白fortran中未格式化文件的格式。

例如:

open (3,file=filename,form="unformatted",access="sequential")write(3) matrix(i,:)

将矩阵列输出到文件中。我发现它在两端填充了4个字节的文件,但是我真的不明白为什么,或者如何控制这种行为。有没有办法删除填充?

谢谢


查看完整描述

3 回答

?
守着星空守着你

Fortran未格式化的文件格式

我不明白fortran中未格式化文件的格式。

例如:

open (3,file=filename,form="unformatted",access="sequential")write(3) matrix(i,:)

将矩阵列输出到文件中。我发现它在两端填充了4个字节的文件,但是我真的不明白为什么,或者如何控制这种行为。有没有办法删除填充?

谢谢


查看完整回答
反对 回复 2019-09-07
?
蝴蝶刀刀

出于这个原因,我从未使用无格式输出的顺序访问。但是它取决于应用程序,有时候有一个记录长度指示器(特别是非结构化数据)很方便。正如steabert在gnuplot上查看来自fortran的二进制输出所示,你可以通过使用关键字参数来避免这种ACCESS = 'DIRECT'情况,在这种情况下你需要指定记录长度。该方法便于有效存储大型多维结构化数据(恒定记录长度)。下面的示例写入一个大小等于数组大小的无格式文件:

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

请注意,从可移植性的角度来看,这不是理想的方法。在使用直接访问编写的无格式文件中,没有关于每个元素大小的信息。描述数据大小的自述文本文件对我来说工作正常,我更喜欢这种方法而不是顺序模式中的填充。




查看完整回答
反对 回复 2019-09-07
?
冉冉说

Fortran IO是基于记录的,而不是基于流的。每次通过您写东西时,write()不仅要写入数据,还要记录该记录的开始和结束标记。两个记录标记都是该记录的大小。这就是为什么在一次写入中写入一堆实数(一个记录:一个开始标记,一堆实数,一个结束标记)具有不同的大小,相对于在单独的写入中写入每个实数(多个记录,每个一个开始标记,一个真实标记和一个结束标记。如果你写下大型矩阵,这是非常重要的,因为如果写得不正确,你可能会占据职业。


查看完整回答
反对 回复 2019-09-07

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信