2015-01-10 2 views
1

Я получаю мочи руками от Fortran и хочу прочитать txt-файл в массив. Я чувствую, что все пробовал. Файл txt разделяется запятой на 11 строк с 1 номером в каждой строке.Fortran 90 read file

Вот мой код

program test 

real:: obs1,i,jj,count,x_1 
real,allocatable:: x(:) 

open(1,file='data1.txt',status='old',action='read') 
read(1,*) obs1 

allocate(x(obs1)) 

do i=1, obs1 
read(1,*) x_1 
x(i)=x_1 
end do 

do jj=1, obs1 
print*,x(jj) 
end do 

end program test 

это ошибка я получаю:

The highest data type rank permitted is INTEGER(KIND=8) 
+0

Надеюсь, у вас есть серьезные основания использовать Fortran. Это ... ужасно, доисторически и т. Д. – i486

+3

@ i486: Почему? Fortran все еще активно развивается, он очень изящный для численных вычислений, компиляторы обычно более эффективны в оптимизации, чем при оптимизации C и т. Д. –

+0

Он разработан соответствующим «фан-клубом». Но я не думаю, что что-то может быть написано в Fortran и будет более компактным, иметь лучшую читаемость и т. Д. С тем же самым в C (кроме одного и того же Fortran «фан-клуба»). – i486

ответ

1

Это утверждение

allocate(x(obs1)) 

содержит ошибку, хотя я не уверен, что это тот, который соответствует сообщению об ошибке, которое вы сообщаете. obs1 - переменная real, но размеры массива (и индексы) должны быть целыми числами. Измените объявление о obs1 в

integer :: obs1 

Ваш компилятор должен жаловаться об использовании real переменной в контур управления тоже, do i=1, obs1. Опять же, используйте целое число.

В качестве стороннего разработчика, поскольку вы новичок в Fortran, научитесь использовать implicit none во всех областях вашей программы. SO предоставит много вопросов и ответов, чтобы объяснить, что это значит и почему это важно, так будет и любой из ваших любимых учебников Fortran.

Смежные вопросы