主题:大侠们帮我看看数据为什么读不出来啊
TOP_HaHa
[专家分:0] 发布于 2012-06-13 12:56:00
met_input = 'GLDAS_SWdown.200003h.direct'
open(10,file=met_input,
: form = 'unformatted', access = 'direct',
: recl = nx*ny, status='old')
do ir=1,ny
do ic=1,nx
read(10, rec = 1) meteoro(ic,ir)
print *,'meteoro(i,j)' , meteoro(ic,ir)
enddo
enddo
回复列表 (共8个回复)
沙发
臭石头雪球 [专家分:23030] 发布于 2012-06-13 13:33:00
因为你始终读的是 rec = 1 的第一个记录,所以始终得到的都是一样的结果。
把
do ir=1,ny
do ic=1,nx
read(10, rec = 1) meteoro(ic,ir)
print *,'meteoro(i,j)' , meteoro(ic,ir)
enddo
enddo
改成这样就行
read(10, rec = 1) meteoro
do ir=1,ny
do ic=1,nx
print *,'meteoro(i,j)' , meteoro(ic,ir)
enddo
enddo
板凳
TOP_HaHa [专家分:0] 发布于 2012-06-13 13:55:00
我向direct格式文件里面写数据的时候是按照下面格式写的:
OPEN (10, file=outputfiles, status='unknown')
OPEN (6, file=outputfile,
: form = 'unformatted', access = 'direct',
: recl = nnc*nnr, status='unknown')
do dd=1,ndays(mcircle)*24
write(6,rec = dd) ((mapedata(ic,ir,dd),ic=1,nnc),ir=1,nnr)
write(10,'(165f10.4)') ((mapedata(ic,ir,dd),ic=1,nnc),ir=1,nnr)
end do
close(10)
close(6)
因为direct格式数据不能看到,所以我就把同样的数据写成ascii存到10文件里面,我从10文件里面看的数据都是正确的,不全是0,但是我用上面的代码把direct格式文件读出来的时候,怎么全是0呢,我尝试了你告诉我的方法,但是print出来的全部还是0啊,大侠帮帮我。
3 楼
臭石头雪球 [专家分:23030] 发布于 2012-06-13 14:08:00
你的数据到底有多大?是几维数组?
写的时候,mapedata(ic,ir,dd)
读的时候, read(10, rec = 1) meteoro(ic,ir)
维数都不一样,我很糊涂。
4 楼
TOP_HaHa [专家分:0] 发布于 2012-06-13 14:12:00
我的数据是1月存一个direct文件,里面包含这个月的天数乘以24个文件,每个文件有290行,165列,我最上面那个程序,只是想试试能不能读出3月第一个文件里面的290行,165列的数据。
5 楼
TOP_HaHa [专家分:0] 发布于 2012-06-13 15:04:00
大侠你帮我看看我往direct文件写数据时写的对不对,谢谢你。
6 楼
臭石头雪球 [专家分:23030] 发布于 2012-06-13 15:50:00
你表达能力有问题
第一
我的数据是1月存一个direct文件,里面包含这个月的天数乘以24个文件
文件里不能再包含文件,至少windows不能。
第二
二进制文件没有行和列的概念。
建议你先看看我的帖子,写给新手的:
[url]http://bbs.pfan.cn/post-256197.html[/url]
看完之后,确定以下问题:
每个文件里有多少数据?
(我不需要知道你有多少个文件)
你的数组是二维还是三维?
分别多大?
每个记录多长?
一个文件分几个记录?
每个记录多大?
7 楼
TOP_HaHa [专家分:0] 发布于 2012-06-13 17:13:00
我看过你的帖子了,我说的一个月存一个direct文件,每个文件里面包含这个月的天数乘以24条记录,每个记录的长度是165*290
8 楼
臭石头雪球 [专家分:23030] 发布于 2012-06-13 17:23:00
OPEN (16, file=outputfile,
: form = 'unformatted', access = 'direct',
: recl = nnc*nnr, status='unknown')
do dd = 1 , ndays(mcircle)*24
read(16,rec = dd ) mapedata(:,:,dd)
end do
close(16)
这样应该就可以
我来回复