我想从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
答案 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