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

标签 arrays fortran fortran77

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

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

最佳答案

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

关于arrays - Fortran 77 在运行时设置数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16310549/

相关文章:

syntax - 奇数 Fortran 指针语法

javascript - 哪个是更好的非空数组检查条件?为什么?

php - 转换为数组 VS is_array()

fortran - 返回多个值的函数

c - C 中是否有类似于 Fortran 中的子例程?

c - 将 Expokit 翻译成 C

javascript - Controller 方法中的本地 JSON 文件和数据

c - 是用宏 "excellent practice"定义数组的长度吗?

arrays - Fortran:从矩阵中提取列和行并将它们用作乘法的一维数组

fortran - FORTRAN 77 程序比 Fortran 90 程序更快吗?