Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Fortran 77在运行时设置数组大小_Arrays_Fortran_Fortran77 - Fatal编程技术网

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

Arrays Fortran 77在运行时设置数组大小,arrays,fortran,fortran77,Arrays,Fortran,Fortran77,基本上,我希望将从文件读取的X,Y对输入到长度为n的数组中,其中n是文件中的行数(因此X,Y对)。不幸的是,我所有试图确定文件长度,然后用它来设置数组大小的尝试都没有成功。如何在Fortran 77中实现这一点?希望我没有遗漏一些显而易见的东西,我更习惯于Python和Java,因为这是非常琐碎的 在问这个问题之前,我环顾了一下四周,似乎普遍的感觉是,你只是将大小设置得比你预期的大,但这似乎非常浪费内存,效率低下。解决方案是使用Fortran 90/95/2003/2008,它具有解决问题所需的

基本上,我希望将从文件读取的X,Y对输入到长度为n的数组中,其中n是文件中的行数(因此X,Y对)。不幸的是,我所有试图确定文件长度,然后用它来设置数组大小的尝试都没有成功。如何在Fortran 77中实现这一点?希望我没有遗漏一些显而易见的东西,我更习惯于Python和Java,因为这是非常琐碎的


在问这个问题之前,我环顾了一下四周,似乎普遍的感觉是,你只是将大小设置得比你预期的大,但这似乎非常浪费内存,效率低下。

解决方案是使用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)