方法一:
考虑如下情形:假设存在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/
|