Fortran Coder

查看: 10170|回复: 7
打印 上一主题 下一主题

[文件读写] Fortran用stream流读取二进制文件问题

[复制链接]

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2015-7-30 19:19:48 来自移动端 | 显示全部楼层
把文件传上来

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2015-7-30 22:19:03 | 显示全部楼层
您的问题有两个:
1.您的数据是一个无格式顺序文件。所以如果你要用 stream 读取,需要在每个 read 前后各加一个 n。
  之前你的代码在前面加了 flag0,但没有在后面加
2.您的数据是一个大端字节序(big-endian),而你的编译器是默认小端字节序的(little-endian),您需要在 Open 的时候指定为大端字节序。
  当然,指定的方法不标准,因为语法没有规定大小端字节序。如果以下的代码在你的编译器上不支持,请告诉我你使用什么编译器,我再为你查找方法。

[Fortran] 纯文本查看 复制代码
Program www_fcode_cn
  Implicit None
  character(len=8) :: flag1             !// 8字节
  character(len=4) :: dtype             !// 数据类型
  integer(kind=4) :: i,j,k,n
  integer(kind=4) :: ii,jj,kk
  Open( 12 , File = "INJECTWATER_FORWUNAN.GRID" ,convert='BIG_ENDIAN', access="stream" , form = "unformatted" )
  Read( 12 ) n,flag1,i,dtype,n
  Write( * , * ) flag1,i,dtype
  Read( 12 ) n,ii,jj,kk,n
  Write( * , * ) ii,jj,kk
  Close( 12 )
 End Program www_fcode_cn
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-16 01:44

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表