声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3551|回复: 14

[经典算法] 请教风花雪月:如何读取多个文件的循环问题

[复制链接]
发表于 2009-12-2 09:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
风花雪月:
   你好!
   想请教你一个问题,就是在一个文件夹 file 中有很多文件名称有规律的数据文件,比如20001.dat ; 20002.dat, 20003.dat.............20010.dat 十个数据文件,每个数据文件中的数据组形式都是a(4,2880),现在想把所有数据中文件中的一个维数a(1,2880) 集中读取出来存到另一个文件00000.dat 中,,  遇到的困难是,怎样实现这些数据文件名的循环,因为我实际遇到的数据文件有上千个,所以,没有办法在程序中写完一个一个数据文件的打开语句,,
您能告诉我怎样做到文件名的循环读取吗??
如果您有时间,用我上面的10个数据文件和对应的问题,写一个读取数据的示例程序,可以吗??
谢谢您的友好与帮助!
欢迎各位高手支招!
谢谢分享你们的知识!
回复
分享到:

使用道具 举报

发表于 2009-12-2 18:47 | 显示全部楼层
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
 楼主| 发表于 2009-12-4 11:28 | 显示全部楼层
楼上的兄弟
我根据你的示例程序写了下面的程序,是这样的:

program duru

dimension  a(4,2880), b(28800)
character(30) :: filename
integer  i, 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


这个该怎样改呢??
发表于 2009-12-4 12:53 | 显示全部楼层
看 我的注释
program duru

dimension  a(4,2880), b(28800)
character(30) :: filename
integer  i, 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

评分

1

查看全部评分

 楼主| 发表于 2009-12-4 15:16 | 显示全部楼层
lilili606
我按照你的说法改了,不过还是出现同样的问题,end-of-file,
新的存储文件里面里面什么都没有,,,
我看了原数据文件,里面的数据都没有问题的,,郁闷,,,
 楼主| 发表于 2009-12-5 14:40 | 显示全部楼层
每次运行之后,总是在文件夹 yuan-shuju 里面产生一个filename 的数据文件(里面没有任何东西),也就是说,读取文件中, 程序的运行并没有能够把定义的文件和那些原来的数据文件匹配起来并进行打开和读数据,,
不知道是否还缺少某个语句,,老弄不明白,
看起来是小问题,还请请高手们支招,,,
发表于 2009-12-5 21:36 | 显示全部楼层
open (10,file='filename')     不好意思喔   这句我没注意   应该改为
open (10,file=filename)
 楼主| 发表于 2009-12-6 13:03 | 显示全部楼层
谢谢 lilili606的热心为本问题做分析和解答,,
问题依旧在,还是建的filename文件名 没有能够去找到原来的数据文件,并打开读取,总会出现一个新的filename 文件,
我再好好想想,看怎么调才能调出来,,
仍然欢迎你的解答,对你在本问题上所花的时间和精力表示感谢,,

评分

1

查看全部评分

发表于 2009-12-6 22:13 | 显示全部楼层
OK   反正最近没啥课  呵呵
发表于 2009-12-20 16:59 | 显示全部楼层

回复 8楼 aliu 的帖子

7楼正解。
如果按4楼注解,再加上路径的话好像应为:
open(10,file='e:\yuan-shuju\'//filename//'')
不一定对啊,哈哈。好久没用fortran了。
 楼主| 发表于 2009-12-29 10:17 | 显示全部楼层
谢谢 luanjab 的建议,,
导师突然让做另外的东西,结果把这个问题差点都忘记了,现在又回到这个问题来了,呵呵,还是在寻找答案中,,,
发表于 2009-12-29 11:04 | 显示全部楼层
end-of-file不是表示资料不足吗?
 楼主| 发表于 2009-12-29 20:44 | 显示全部楼层

回复 12楼 ChaChing 的帖子

这个我查找过了,所要读入的资料,也就是原数据文件的数据是没有问题,我觉得问题是所定义的路径没有能够找到原数据文件夹中的各个 .dat 文件,并进行匹配和打开读取数据,可惜,问题依旧存在,,,,还得从新调....

谢谢你的建议,,,
 楼主| 发表于 2010-1-1 16:27 | 显示全部楼层
搞定了,改用了另外的语言IDL 。之前用FORTRAN一直老出现问题,至今没有看到问题出在哪里,暂时放弃。我用的IDL 程序是这样的:
pro  duru
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

查看全部评分

 楼主| 发表于 2010-1-1 16:27 | 显示全部楼层
谢谢以上为我提过建议的朋友们,,
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-27 20:56 , Processed in 0.096131 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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