基本上我希望将从文件中读取的 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)