如何在fortran中打开具有特定扩展名(名称前缀)的所有文件?

时间:2016-07-25 22:53:44

标签: fortran fortran90 gfortran fortran77 fortran95

我想从Fortran中的某些文件中读取数据,当文件名具有常规顺序时,我可以这样做。但现在它不是常规的,虽然它们都有相同的前缀,例如:Fix001,Fix002,Fix023,Fix432,......

我希望程序从用户获取前缀并打开循环中的所有文件,读取数据并将其写入单个文件中。 任何的想法 ? 感谢。

PROGRAM Output
Implicit none
Integer ::n=5        !number of files
Integer ::nn=50  !number of rows in each file
Integer ::i,j
Real,Dimension(:),Allocatable::t,x,y,z
Character(len=12)::TD 

Open(11,file='outputX.txt')
Allocate (t(1000),x(1000),y(1000),z(1000)) 

 j=0
Do i=1,n
    Write(TD,10)i 
    Write(*,*)TD 
    Open(1,file=TD) 
        Read(1,*)(t(j),x(j),j=1,nn)
        Write(11,20)(x(j),j=1,nn)
 j=j+1
Enddo

10  Format('100',i3.3,'') 
20 Format(<nn>E25.8E3)

 Deallocate(x,y,z,t) 
 END PROGRAM Output

1 个答案:

答案 0 :(得分:1)

如果您有上限,可以尝试打开文件并使用iostat参数进行测试是否成功。如果不是,则跳过该文件。

这是一个只读取文件中第一个整数变量并将其附加到输出文件的示例:

program read_files
    implicit none
    integer :: i, d
    integer :: ioerr
    character(len=len("FixXXX.txt")) :: fname

    open(unit=30, file="Output.txt", action="write", iostat=ioerr)
    if (ioerr /= 0) stop 1

    do i = 0, 999
        write(fname, '(A, I3.3, A)') "Fix", i, ".txt"
        open(unit = 40, file=fname, status="old", action="read", iostat=ioerr)
        if (ioerr /= 0) cycle
        read(40, *) d
        write(30, *) d
        close(40)
    end do
end program read_files