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

时间:2014-12-07 12:24:17

标签: fortran fortran90 multiple-files

我有一些关于打开和阅读多个文件的问题。我必须编写一个代码,该代码以相同的方式读取n个文件中的两列(它们仅对值有所不同......)。在此之前,我打开另一个输入文件和一个输出文件,我将在其中编写结果。我在这个论坛(such as this one)中阅读了其他问题并试图做同样的事情,但我收到了这些错误:

 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)

 read(fileinp,'(I5)') i-49
           1
 Error: Invalid character in name at (1)

我的文件从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的专家,所以请不要使用困难的语言,谢谢。

1 个答案:

答案 0 :(得分:0)

麻烦的行是

read(fileinp,'(I5)') i-49

你肯定要做一个write(如链接示例中所示):这个read语句尝试从变量fileinp读取而不是写它。

那就是说,简单地用write替换可能不是你需要的。这将忽略前一行

fileinp = 'lin*27-'

仅依次设置为“1”,“2”,“3”(带有前导空格)。类似的东西(假设你打算*在那里)

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

另请注意在格式中使用I1而不是I5:您可能希望避免文件名中的空格。 [当只有一位数时,这是合适的;在推广时查找Iw.mI0。]