Fortran Coder

标题: fortran如何批量读入txt文件! [打印本页]

作者: 274068459    时间: 2017-2-7 20:11
标题: fortran如何批量读入txt文件!
欧巴们~本人是fortran新手,想要批量处理一大堆txt文件,但是现在不知道如何批量读入。求指点!!!!!

作者: fcode    时间: 2017-2-7 20:30
方法一:
考虑如下情形:假设存在100 个文件,分别存储了1900-1999 年的降雨量,现在需要计
算着100 年的总降雨量。文件名为:前缀+年份+后缀,例如:降雨量-1900.dat、降雨量
-1901.dat 。由于文件名是有规律的,仅年份变化,可以用循环来一次读取文件。
[Fortran] 纯文本查看 复制代码
program test
  integer i
  real s, a
  character(20):: filename='降雨量-1234.dat'
  s = 0.0
  do i=1900, 1999
    !内部文件读写,将filename 第8-11 字符换为相应年份
    write(filename(8:11),'(i4)') i
    open(11,file=filename)
    read(11,*) a
    close(11)
    s = s + a
  end do
end program

这种方法优点是可以按顺序读取文件,缺陷也很明显,只能处理有规律的文件名。

方法二:
如果文件名没有规律,使用另一种方法。先用命令行指令将需要处理的文件的文件名写
入另外一个文件当中:
call system ('dir *.txt /b > 1.dat' )
上述代码含义:找出工作目录下所有txt 文件,将其文件名存入1.dat 当中,注意二者的
后缀不应相同(txt, dat)。为了避免错误,需要事先删除无用的txt 文件。修改命令行指令,
可以找出任意符合条件的文件,比如找出上例中存储降雨量的文件:
call system ('dir 降雨量-*.dat /b > 1.txt' )
完整代码如下:
[Fortran] 纯文本查看 复制代码
program test
  integer i
  real s, a
  character(512):: filename
  !文件1.dat 中存储工作目录下所有txt 文件列表
  call system ('dir *.txt /b > 1.dat' )
  s = 0.0
  open(10,file='1.dat')
  do
    !读取文件名
    read(10,'(a)',iostat=i) filename
    if(i/=0) exit
    open(11,file=filename)
    read(11,*) a
    close(11)
    s = s + a
  end do
  close(10,status='delete') !关闭并删除文件1.dat
end program

方法二优点是不要求文件名称有很强规律性,缺点是处理每个文件的顺序是未知的。如
果文件个数不多,且需要按顺序处理,可以手动生成文件列表。

方法三,仅限于 IVF 编译器:
http://doinfolder.w.fcode.cn/


作者: 274068459    时间: 2017-2-7 20:54
特别感谢你的回复!我这就尝试一下!
作者: 18268732401    时间: 2017-2-28 18:10
雪球大大威武




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2