爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8154|回复: 11

[求助] 读取数据出错

[复制链接]

新浪微博达人勋

发表于 2012-11-30 13:53:53 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
一个小程序出错,搜了一下类似的问题,但是不知道为什么别人的方法用到我这里还是会出错,求高人指点~
wx.dat是一个求过纬向平均的73*17的数据,要把它读出来到txt里,程序如下:
program wx
implicit none
character *25 filen1,filen2
integer i,j
real  wx(17,73)
filen1="d:\wave\hgt\wx.dat"
filen2="d:\wave\hgt\x.txt"

!读取wx
open(11,file=filen1,form="binary")
open(12,file=filen2)
do i=1,17
      read(11,*)(wx(i,j),j=1,73)
   write(12,*)(wx(i,j),j=1,73)
   end d0

end
错误提示:D:\wave\hgt\f\wx.f90(6) : Error: Conflicting attributes or multiple declaration of name.   [WX]
real  wx(17,73)
------^
D:\wave\hgt\f\wx.f90(17) : Error: This global name is invalid in this context.   [WX]
      read(11,*)(wx(i,j),j=1,73)
-----------------^
D:\wave\hgt\f\wx.f90(17) : Error: Constants and expressions are invalid in read-only I/O lists.   [WX]
      read(11,*)(wx(i,j),j=1,73)
-----------------^
D:\wave\hgt\f\wx.f90(18) : Error: This global name is invalid in this context.   [WX]
   write(12,*)(wx(i,j),j=1,73)
----------------------^
Error executing df.exe.
wx.obj - 4 error(s), 0 warning(s)
急用,谢谢大家啦!

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2012-11-30 14:45:01 | 显示全部楼层
初步看下来有这样几个错误:
1,wx变量已经被用作你的文件名“program wx”就不能再定义了,建议将program改成别的;
2,最后一个enddo,你写成了endd0(零),0虽然有点儿像o(欧),但是有差别的。

除此之外的,read部分的“binary”语句暂时不能判断错否。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-30 14:54:45 | 显示全部楼层

嗯,改过之后没错了,谢谢版主,不最后运行完以后,的这个信息,不知是不是有错的意思,求解答!
QQ截图20121130145434.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-30 14:57:08 | 显示全部楼层
言深深 发表于 2012-11-30 14:45
初步看下来有这样几个错误:
1,wx变量已经被用作你的文件名“program wx”就不能再定义了,建议将program ...

另外,生成的x.txt里面什么内容都没有,呜呜。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-30 15:32:45 | 显示全部楼层
这是因为二进制的数据是没格式的,不需要格式读入,只需read加文件号

评分

参与人数 1金钱 +6 收起 理由
言深深 + 6

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-30 16:17:34 | 显示全部楼层
一颗梅子在南京 发表于 2012-11-30 15:32
这是因为二进制的数据是没格式的,不需要格式读入,只需read加文件号

嗯,改过这后可以正确读取了,读出来的数据是对的,证明原来的dat文件没有问题,其实我的目的是想让原来dat里面的的负值加上360,正值不变,改过之后的代码如下,麻烦您再帮我检查一下错误啦,谢谢,我是刚学的fortran,很多看不懂,呵呵~
program  abc
implicit none

character *25 filen1,filen2
integer i,j
real  wx(17,73)

filen1="d:\wave\hgt\wx.dat"
filen2="d:\wave\hgt\x.dat"


!读取wx
open(11,file=filen1,form="binary")

do i=1,17
      read(11)(wx(i,j),j=1,73)
end do

close(11)


!把wx里的负值加上360
do i=1,17
  do j=1,73
   if (wx(i,j)<=0)
      wx(i,j)=wx(i,j)+360
   else
      wx(i,j)=wx(i,j)
        open(12,file=filen2)
write(12,*)wx(i,j)
close(12)
        end if
  end do
end do
end
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-30 16:26:25 | 显示全部楼层
ABCD 发表于 2012-11-30 16:17
嗯,改过这后可以正确读取了,读出来的数据是对的,证明原来的dat文件没有问题,其实我的目的是想让原来d ...

你运行一下看结果不就知道对不对了嘛!
1、if语句要搭配endif使用的,建议你好好看看if语句是如何编写的
2、open文件在之前打开就OK了,你在do循环语句里面打开的话要打开多少次呀,每循环一次就打开一次吧
建议你好好看看fortran书
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-11-30 16:33:31 | 显示全部楼层
一颗梅子在南京 发表于 2012-11-30 16:26
你运行一下看结果不就知道对不对了嘛!
1、if语句要搭配endif使用的,建议你好好看看if语句是如何编写的 ...

好吧,我知道被鄙视了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-30 16:38:57 | 显示全部楼层
ABCD 发表于 2012-11-30 16:33
好吧,我知道被鄙视了

完全没有鄙视你的意思,刚开始学都这样
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-5 10:17:51 | 显示全部楼层
循环中读取二进制文件那句话修改为如下:
read(11)(wx(i,j),j=1,73)
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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