佩服,佩服,高手!非常感谢 |
用 sequential 方式写入的数据,前后会多一个 integer 来表示当前记录的长度。 所以用 stream 读取的时候,需要用一个 integer 来占位。(例子中的m) [Fortran] 纯文本查看 复制代码 Program PointTS Implicit none ! Integer(kind=1) Integer(kind=4) i, j, k, m Real(kind=8) EETIME Real(kind=8) EETIME_1 Integer(kind=4), Allocatable :: KSZ_Global(:,:), KSZ_Global_1(:,:) Allocate(KSZ_Global(2,3)) Allocate(KSZ_Global_1(2,3)) EETIME = 1 k = 0 Do i = 1, 3 Do j = 1,2 KSZ_Global(j,i) = i+j+k k = k + 1 End Do End Do Open (Unit=32, File="Matrix.bin", Status='Unknown') Close(Unit=32, Status='DELETE') Open(Unit=32,File="Matrix.bin",Status="new",Access='sequential',FORM='unformatted') Do k = 1, 3 Write(32) EETIME Write(32) ((KSZ_Global(i,j),j=1,3), i=1,2) EETIME = EETIME + 1.0 KSZ_Global = KSZ_Global + 1 End Do Close(32) Open(Unit=32,File="Matrix.bin",Status="old",Access='stream',FORM='unformatted') Do k = 1, 3 Inquire(32, Pos = m) Read(32) EETIME_1 Inquire(32, Pos = m) Write(6,*) EETIME_1 Read(32) ((KSZ_Global_1(i,j),j=1,3), i=1,2) Inquire(32, Pos = m) Write(6,*) ((KSZ_Global_1(i,j),j=1,3), i=1,2) End Do Close(32) End Program |
本帖最后由 静待花开 于 2022-10-4 19:18 编辑 Transpose 发表于 2022-10-3 09:40 谢谢回复。 我是在尝试read一个开源程序输出的二进制文件,它write时采用的是binary,sequential,没有用stream。但我自己就是读不出来正确值,就用上面的代码做了试验。所以write文件的方式是按这个开源程序,也是没有办法,可否指教下问题出在哪里。 |
Fortran流文件-读写二进制任意位置 二进制的读写比较推荐流文件的格式,只需要按照顺序读取即可,旧的方式的需要考虑recl,比较麻烦 |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-11-23 10:15