loveboyzmj 发表于 2021-6-18 20:17:57

【求助】Fortran用stream流读取二进制文件问题2

本帖最后由 loveboyzmj 于 2021-7-16 07:37 编辑

各位专家,大家好,本人从事油藏工程分析工作,日常会用到油藏数模模拟器(均为fortran编写),目前手里有一个模拟器生成的二进制文件,我采用上一贴的解决方法,在读取这个文件里得数据时,最后出现了乱码:@饱?N?
我用的编辑器是:simply fortran,代码如下, 感谢各位专家!!!
Program www_fcode_cn

Use, Intrinsic :: ISO_C_BINDING      !// 使用内部模块,保持与 C 语言变量类型一致

Implicit None

character(len=80) :: fline

character(len=8) :: flag1             !// 8字节
character(len=8) :: flag2             !// 8字节
character(len=24) :: flag3            !// 8字节
character(len=4) :: dtype             !// 数据类型

integer(kind=4) :: i,j,k,n
integer(kind=4) :: ii,jj,kk,NUM,B1,B2,B3
real(kind=4):: x0,y0,x1,y1,x2,y2

integer(kind=4) :: X

integer vertex1(10)

real vertex(24)

real,ALLOCATABLE :: A(:)
DOUBLE PRECISION,ALLOCATABLE :: B(:)
integer,ALLOCATABLE :: C(:)

integer,ALLOCATABLE :: INTE(:)
DOUBLE PRECISION,ALLOCATABLE :: DOUB(:)
real,ALLOCATABLE :: REALM(:)
character,ALLOCATABLE :: CHARM(:)
logical,ALLOCATABLE :: LOGI(:)

Open(13, File = "BASE_FS_TEST_Streamline_1.out" , STATUS = 'New' , ACTION = 'Write') ! 打开名为test.out的1号文件

Open( 12 , File = "BASE_FS_Test.sln0042" ,convert='BIG_ENDIAN', access="stream" , form ="unformatted")

Read( 12 ) n,flag1,i,dtype,n

Write(13,*) flag1

if (i>0) then

   ALLOCATE(INTE(i))

   Read( 12 ) n,INTE,n

   Write(13,100)INTE
100format(3i12)

   DEALLOCATE(INTE)

   Write(13,*) "------------------------------------"

end if


Read( 12 ) n,flag1,i,dtype,n

Write(13,*) flag1

if (i>0) then

      ALLOCATE(DOUB(i))

   Read( 12 ) n,DOUB,n

   Write(13,101)DOUB
101format(3f12.4)

   DEALLOCATE(DOUB)

   Write(13,*) "------------------------------------"

end if

Read( 12 ) n,flag1,i,dtype,n

print *,flag1


Close(12)

Close(13)

print *,"Over..."

End Program www_fcode_cn
二进制文件BASE_FS_Test.sln0042 下载地址:

链接:https://pan.baidu.com/s/17ivgE8IjWwyR5r-ugiPyEQ
提取码:pzj1
软件手册里文件格式描述:


页: [1]
查看完整版本: 【求助】Fortran用stream流读取二进制文件问题2