2013-04-30 4 views
1

기본적으로 파일에서 길이가 n 인 배열로 X, Y 쌍을 읽으려고합니다. 여기서 n은 파일의 행 수 (따라서 x, y 쌍)입니다. 불행히도 배열의 크기를 설정하기 위해 파일의 길이를 결정할 때 내 시도는 실패했다. Fortran 77에서 어떻게 이것을 할 수 있습니까? 호핑 나는 명백한 것을 놓치고 있지 않다. 파이썬과 자바에 익숙하다.Fortran 77 런타임에 배열 크기를 설정하십시오

추신. 이것을 묻기 전에 나는 주변을 둘러 보았고 일반적인 느낌은 크기를 더 크게 설정했다는 것을 예상 했었다는 것을 알았지 만 그것은 매우 낭비적이고 비효율적 인 기억이었습니다.

답변

2

해결 방법은 문제에 필요한 기능을 갖춘 Fortran 90/95/2003/2008을 사용하는 것이지만 FORTRAN 77은 그렇지 않습니다. 파일을 한 번 읽으면 데이터 항목 수를 확인할 수 있습니다. 파일을 되감습니다. 필요한 길이의 배열을 할당하십시오. 파일을 다시 읽고 배열을 읽습니다.

은 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) 
관련 문제