Fortran 77在运行时设置数组大小

时间:2013-04-30 23:27:16

标签: arrays fortran fortran77

基本上我希望输入X,Y对从文件中读取长度为n的数组,其中n是文件中的行数(以及x,y对)。不幸的是,我所有尝试确定文件长度然后使用它来设置数组的大小都是不成功的。我怎样才能在Fortran 77中实现这一目标?希望我没有遗漏一些明显的东西,我更习惯于Python和Java,这是相当微不足道的。

PS。在问这个问题之前,我环顾四周,似乎一般的感觉是你只是设置了比你想象的更大的尺寸,但这看起来非常浪费和低效。

1 个答案:

答案 0 :(得分:2)

解决方案是使用Fortran 90/95/2003/2008,它具有您的问题所需的功能,而FORTRAN 77则没有。读取文件一次以确定数据项的数量。倒回文件。分配所需长度的数组。再次读取文件,读入数组。

使用Fortran 2003/2008(未经测试):

use iso_fortran_env

real :: xtmp, ytmp
real, dimension (:), allocatable :: x, y
integer :: i, n
integer :: Read_Code

open (unit=75, file=...)

n = 0
LengthLoop: do

   read ( 75, *, iostat=Read_Code)  xtmp, ytmp

   if ( Read_Code /= 0 ) then
      if ( Read_Code == iostat_end ) then
         exit LengthLoop
      else
         write ( *, '( / "read error: ", I0 )' )  Read_Code
         stop
      end if
   end if

   n = n + 1

end do LengthLoop

allocate (x(n))
allocate (y(n))

rewind (75)

do i=1, n
   read (75, *) x(i), y(i)
end do

close (75)