主题:读取二进制文件时出错
halala008
[专家分:0] 发布于 2010-10-17 20:23:00
程序源码是ftp://hanna.ccmc.gsfc.nasa.gov/pub/modelweb/radiation_belt/
里面的radbelt的Fortran代码。
程序编译成功,运行后出错。很可能是读取文件时出错,代码为RADBELT文件第251行。
有可能读取该文件时,需要转换为BIG_ENDIAN。
以前jstzhurj指出了一些错误参看:http://bbs.pfan.cn/post-350643.html
程序看起来是运行了,但还是出现了些错误,我自己找了很久,感觉很可能还是文件读取时有问题。当读取AP8MAX.BIN文件时,对应的文本文件应该是AP8MAX.ASC
程序如果运行正常,输入参数分别为 0 回车,1回车,2回车,20 30回车,1回车,2.0回车,1回车,2.0回车。计算结果应该不为0。
希望高手解答,如果jstzhurj能够再次回答我的问题,那会更好。
最后更新于:2010-10-17 21:10:00
回复列表 (共13个回复)
沙发
jstzhurj [专家分:4680] 发布于 2010-10-17 22:11:00
我都已经把下载的东西删了,把读取二进制文件涉及的所有整型数据全部换成短整型integer(2),有些整型数组是直接dimension声明的,需要先声明成短整型integer(2),这样去读数据应该没问题了,至于其他运算,可以一步步查错。
板凳
halala008 [专家分:0] 发布于 2010-10-17 23:35:00
我同学后来也给我指点了下,那段代码,有一部分注释掉的语句是可以读取ASC文件的
这样的话,其它部分可以不做任何改动,程序可以成功运行。
你以前给我讲过读取二进制文件时OPEN语句的FORM要将unformatted改为binary,我想请教下你这两者有什么区别,还有就是我想知道读取二进制文件的代码是哪里出了错,这次运气好,源代码提供了ASC文件,以后如果遇到二进制文件还是要会处理。
3 楼
jstzhurj [专家分:4680] 发布于 2010-10-18 00:01:00
unformatted改为binary应该是没有什么区别的,可能是编译器依赖的,或者说fortran标准不同引起的,你到底要读哪个文件?你现在二进制能正确读取了吗?能打印几个IHEAD贴上来看看吗?再把map数组的头几个数据贴上来,我判断一下你读对了没有。
我现在没程序,凭记忆说的,不知道变量说对了没有。
4 楼
halala008 [专家分:0] 发布于 2010-10-18 00:26:00
我二进制文件还是没有正确读取,但是这个程序本身即附带了.bin文件也附带了.asc文件,这两种文件记录的是同样的数据。程序里读取.asc的代码是被注释起来的。我后来就打开.asc文件程序也正常运行了。
我就是想请教下你,那段读取二进制文件的代码问题出在了哪里。
IHEAD 2 4 1970 100 2048 2048 1024 16296
MAP 1877 10
你的记忆力非常好,看来你那次帮我查程序,也花了些时间,论坛里多亏了向你这样无私奉献的人。
5 楼
jstzhurj [专家分:4680] 发布于 2010-10-18 00:38:00
看来我需要重新下载一下。
6 楼
jstzhurj [专家分:4680] 发布于 2010-10-18 00:50:00
[quote]
我二进制文件还是没有正确读取,但是这个程序本身即附带了.bin文件也附带了.asc文件,这两种文件记录的是同样的数据。程序里读取.asc的代码是被注释起来的。我后来就打开.asc文件程序也正常运行了。
我就是想请教下你,那段读取二进制文件的代码问题出在了哪里。
IHEAD 2 4 1970 100 2048 2048 1024 16296
MAP 1877 10
你的记忆力非常好,看来你那次帮我查程序,也花了些时间,论坛里多亏了向你这样无私奉献的人。[/quote]
以上数据针对哪一个二进制文件?
7 楼
halala008 [专家分:0] 发布于 2010-10-18 08:45:00
针对AP8MAX.BIN ,我读的是AP8MAX.ASC文件
8 楼
jstzhurj [专家分:4680] 发布于 2010-10-18 10:09:00
你贴的是asc文件里面的东西吧
IHEAD 2 4 1970 100 2048 2048 1024 16296
MAP 1877 10
9 楼
jstzhurj [专家分:4680] 发布于 2010-10-18 10:13:00
你贴的是asc文件里面的东西吧
IHEAD 2 4 1970 100 2048 2048 1024 16296
MAP 1877 10
10 楼
halala008 [专家分:0] 发布于 2010-10-18 12:26:00
我读的就是这个文件里面的东西,我只在屏幕上输出了一下,读出的东西和文件中的东西相同,我就直接把文件里的东西贴上去了
二进制文件我没有正确读取。
我来回复