2013-04-30 72 views
1

基本上我正在寻找从文件读入长度为n的数组中的X,Y对,其中n是文件中的行数(以及x和y对)。不幸的是,我所有的确定文件长度然后使用它来设置数组大小的尝试都不成功。我如何在Fortran 77中完成此任务?希望我不会错过某些明显的东西,我更习惯于Python和Java,这是很平凡的。Fortran 77在运行时设置数组大小

PS。在问这个问题之前,我环顾四周,看起来总的感觉是,你只是把尺寸设置得大一点,然后你就会期望它变大,但是这看起来非常浪费和低效。

回答

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)