2013-04-30 3 views
1

В основном я ищу, чтобы ввести пары X, Y, считанные из файла в массивы длины n, где 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) 
Смежные вопросы