如何在Fortran 90中打开和读取多个文件

如何在Fortran 90中打开和读取多个文件,fortran,fortran90,Fortran,Fortran90,我在打开和读取多个文件时遇到一些问题。我必须写一个代码,读取n个文件中的两列,它们的格式相同,只是值不同。。。。在这之前,我打开另一个输入文件和一个输出文件,我将在其中写入结果。我在这个论坛上阅读了其他问题,并尝试做同样的事情,但我收到了以下错误: read(fileinp,'(I5)') i-49 1 devstan.f90:20.24: fileLoop : do i = 50,52 2 Error: V

我在打开和读取多个文件时遇到一些问题。我必须写一个代码,读取n个文件中的两列,它们的格式相同,只是值不同。。。。在这之前,我打开另一个输入文件和一个输出文件,我将在其中写入结果。我在这个论坛上阅读了其他问题,并尝试做同样的事情,但我收到了以下错误:

 read(fileinp,'(I5)') i-49
                   1
 devstan.f90:20.24:

 fileLoop : do i = 50,52
                    2
 Error: Variable 'i' at (1) cannot be redefined inside loop beginning at (2)

我的文件编号从1到n,命名为“lin*27-n.dat”,其中n是从1开始的索引,代码为:

 program deviation
  implicit none

  character(len=15) :: filein,fileout,fileinp
  integer :: row,i,h
  real :: usv,usf,tsv,tsf,diff


  write(*,'(2x,''Input file .......''/)')
  read(*,'(a12)') filein
  write(*,'(2x,''Output file........''/)')
  read(*,'(a12)') fileout
  open(unit = 30,File=filein)
  open(unit = 20,File=fileout)


  fileLoop : do i = 50,52
  fileinp = 'lin*27-'
  read(fileinp,'(I5)') i-49
  open(unit = i,File=fileinp)


   do row = 1,24
    read(30,*) h,usv,tsv
    read(i,*)  h,usf,tsf

     diff = usf - usv

    write(20,*) diff
   enddo
   close(i)
  enddo fileLoop

 end program deviation

我怎样才能解决它?我不擅长Fortran,所以请不要使用难懂的语言,谢谢。

麻烦的一行是

read(fileinp,'(I5)') i-49
您肯定想像链接的示例中那样进行写操作:这个read语句尝试从变量fileinp中读取,而不是向它写入

也就是说,简单地用write替换可能也不是您所需要的。这将忽略上一行

fileinp = 'lin*27-'
只需依次设置为1、2、3和前导空格。比如假设你打算去那里

write(fileinp, '("lin*27-",I1)') i-49

还要注意在格式中使用I1,而不是I5:人们可能希望避免文件名中出现空格。[这适用于只有一个数字的情况;泛化时查找Iw.m和I0。]

谢谢francescalus,但如果我的输入文件是“lin*27-1”,是否只需要将I5.5更改为I1?因为在运行时我收到了这个错误:在文件devstan.f90 unit=50的第28行,文件='lin*27-00001'Fortran运行时错误:文件结束
write(fileinp, '("lin*27-",I1)') i-49