Fortran Coder

查看: 26832|回复: 22
打印 上一主题 下一主题

[文件读写] 关于二进制文件的读入问题?

[复制链接]

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
楼主
发表于 2020-5-16 12:53:30 | 显示全部楼层
本帖最后由 li913 于 2020-5-16 13:05 编辑

1、LNOW是什么类型,因为前面也没有显示声明.
如果代码中没有implicit none, 默认用I-N规则解析变量类型,那么就是整型。
2、WORK在前面已经申明是WORK(1)
work是形参数组,其长度并不是1,详细介绍见《三种数组传递方式》http://fcode.cn/guide-103-1.html
这里(WORK(I),I=1,LNOW)是一个隐循环,把Lnow个数据读入work中。
3、读取结果不符合预期,检查文件内容是否正确,文件路径是否正确。
4、 二进制文件,必须知道其存储格式才能读取。二进制和十进制文件转换小工具,这个工具的源代码是重要的线索。
5、你给的这个二进制文件可能有问题,缺少最后一个数据。

1.png (104.24 KB, 下载次数: 382)

1.png

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
沙发
发表于 2020-5-17 09:19:21 | 显示全部楼层
本帖最后由 li913 于 2020-5-17 09:40 编辑

你静态编译一个小工具的可执行,附带二进制文件,以及使用方法, 一起上传。
之前的二进制文件肯定是有问题的。

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
板凳
发表于 2020-5-17 16:13:17 | 显示全部楼层
本帖最后由 li913 于 2020-5-17 17:51 编辑

研究了两天,发现这个代码是比较奇葩的,典型的国外开源代码风格,故意让人看不懂(也可能是代码太老了)。核心也就那么十来行。将所有数据读入数组,通过一定规则(numchk函数)判断每个数据的真实类型(real 或 integer),然后每6个数据输出一行。

[Fortran] 纯文本查看 复制代码
!判断数据是整数还是实数
subroutine numchk (ia,icode)
character aho*7
write(aho,'(i7)') ia
if(aho.eq.'*******') then
  icode = 0
else
  icode = 1
endif
end
      
program test
implicit none
integer(4) m, n, i, j, k
real,allocatable:: a(:)
real b
equivalence(b,n)
character cl*3

!读取
open(10,file='FASTLIB', ACCESS='SEQUENTIAL',FORM='UNFORMATTED')
read(10) m
allocate(a(m)) !分配空间
rewind(10)
read(10) m, a(1:m)
close(10)

!输出
open(10,file='out.txt')
k=0
do i = 1, m
  b = a(i)
  k=k+1
  if(mod(k,6)==0) then !每6个数据输出一行
    cl = 'yes'
  else
    cl = 'no'
  end if
  call numchk(n,j) !判断数据是整数还是实数
  if(j==0) then
    write(10,'(1pe12.5)', advance=cl) b
  else
    write(10,'(4x,i7,1x)',advance=cl) n
  end if
end do
end

QQ截图20200517160850.png (106.58 KB, 下载次数: 299)

QQ截图20200517160850.png

1.png (81.34 KB, 下载次数: 278)

1.png

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
地板
发表于 2020-5-17 20:15:34 | 显示全部楼层
1、equivalence(b,n), 二者的二进制表示形式一样(同一块内存),但值不一样;
2、n=b, 值一样(或近似,存在取舍), 二进制不一样。
3、文件中的某个地址上的值,到底是整型还是实型,需要通过判断才能确定,但不管是啥类型,二进制形式是相同的(文件不会改变)。
4、参考 http://fcode.cn/guide-120-1.html
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-5 06:20

Powered by Tencent X3.4

© 2013-2024 Tencent

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