请教风花雪月:如何读取多个文件的循环问题
风花雪月:你好!
想请教你一个问题,就是在一个文件夹 file 中有很多文件名称有规律的数据文件,比如20001.dat ; 20002.dat, 20003.dat.............20010.dat 十个数据文件,每个数据文件中的数据组形式都是a(4,2880),现在想把所有数据中文件中的一个维数a(1,2880) 集中读取出来存到另一个文件00000.dat 中,,遇到的困难是,怎样实现这些数据文件名的循环,因为我实际遇到的数据文件有上千个,所以,没有办法在程序中写完一个一个数据文件的打开语句,,
您能告诉我怎样做到文件名的循环读取吗??
如果您有时间,用我上面的10个数据文件和对应的问题,写一个读取数据的示例程序,可以吗??
谢谢您的友好与帮助!
欢迎各位高手支招!
谢谢分享你们的知识! character(20)::filename
filename="20001.dat"
do i=1,10
write(filename(4:5),"(i2.2)")i
open(20,file=filename)
! do sth.....
close(20)
end do
end 楼上的兄弟
我根据你的示例程序写了下面的程序,是这样的:
program duru
dimensiona(4,2880), b(28800)
character(30) :: filename
integeri, j, m
open(10,file='e:\yuan-shuju\filename') !!原来数据的路径
open (20,file='e:\shuju\000.dat',statu='new') !! 要存储起来的新的数据文件
filename='00022007003vr.dat' !!原第一个数据文件的名称(后面其他数据文件名变化的主要是9-11个数,即003的位置)
do i=003,010
write(filename(9:11),"(i3)") i
open (10,file='filename')
read(10,*)a
do j=1,2880
do m=1,28800
b(m)=a(1,j)
enddo
enddo
write(20,*)b(m)
close(10)
enddo
end
——————————————————————————
运行的错误提示是:
end -of -file during read ,unit10,file e:\yuan-shuju\filename
这个该怎样改呢?? 看 我的注释
program duru
dimensiona(4,2880), b(28800)
character(30) :: filename
integeri, j, m
open(10,file='e:\yuan-shuju\filename') !!这句有问题,filename此时还没有赋值,打开时没有意义的,删掉就好了
open (20,file='e:\shuju\000.dat',status='new')
filename='00022007003vr.dat'
do i=003,010
write(filename(9:11),"(i3.3)") i !这里要改成I3.3表示前面把0补全
open (10,file='filename') !如果文件不在当前文件夹的话,在这里加上路径再加filename
read(10,*)a
do j=1,2880
do m=1,28800
b(m)=a(1,j)
enddo
enddo
write(20,*)b(m)
close(10)
enddo
end lilili606
我按照你的说法改了,不过还是出现同样的问题,end-of-file,
新的存储文件里面里面什么都没有,,,
我看了原数据文件,里面的数据都没有问题的,,郁闷,,, 每次运行之后,总是在文件夹 yuan-shuju 里面产生一个filename 的数据文件(里面没有任何东西),也就是说,读取文件中, 程序的运行并没有能够把定义的文件和那些原来的数据文件匹配起来并进行打开和读数据,,
不知道是否还缺少某个语句,,老弄不明白,
看起来是小问题,还请请高手们支招,,, open (10,file='filename') 不好意思喔 这句我没注意 应该改为
open (10,file=filename) 谢谢 lilili606的热心为本问题做分析和解答,,
问题依旧在,还是建的filename文件名 没有能够去找到原来的数据文件,并打开读取,总会出现一个新的filename 文件,
我再好好想想,看怎么调才能调出来,,
仍然欢迎你的解答,对你在本问题上所花的时间和精力表示感谢,, OK 反正最近没啥课呵呵
回复 8楼 aliu 的帖子
7楼正解。如果按4楼注解,再加上路径的话好像应为:
open(10,file='e:\yuan-shuju\'//filename//'')
不一定对啊,哈哈。好久没用fortran了。 谢谢 luanjab 的建议,,
导师突然让做另外的东西,结果把这个问题差点都忘记了,现在又回到这个问题来了,呵呵,还是在寻找答案中,,, end-of-file不是表示资料不足吗?
回复 12楼 ChaChing 的帖子
这个我查找过了,所要读入的资料,也就是原数据文件的数据是没有问题,我觉得问题是所定义的路径没有能够找到原数据文件夹中的各个 .dat 文件,并进行匹配和打开读取数据,可惜,问题依旧存在,,,,还得从新调....谢谢你的建议,,, 搞定了,改用了另外的语言IDL 。之前用FORTRAN一直老出现问题,至今没有看到问题出在哪里,暂时放弃。我用的IDL 程序是这样的:
produru
j=4
t=2880
day=string(365)
dir='e:\yuan-shuju\'
outfile='e:\shuju\00.dat'
if(n_elements(outfile) eq 1)then begin
openw,outlun,outfile,/get_lun
endif else begin
outlun=-1
endelse
for k=1,365 do begin
day=string(k,format='(i3.3)')
filename='00022007'+day+'vr.dat'
openr,lun,dir+filename,/get_lun
a=fltarr(j,t)
readf,lun,a
free_lun,lun
for i=0,t-1 do begin
aa=a(0,t-1)
printf,outlun,aa
endfor
endfor
free_lun,lun
end 谢谢以上为我提过建议的朋友们,,
页:
[1]