Я пытаюсь прочитать файл ASCII и получаю ошибки при компиляции, например:
Error: Syntax error in READ statement at (1)
А также
Error: Allocatable array 'pos' at (1) must have a deferred shape or assumed rank
Мой код:
subroutine read_file(pos,mass,rho,vel,n)
integer :: i, n
real, allocatable, intent(out) :: pos(3,n), mass(n), rho(n), vel(3,n)
open(unit=11,file="star.ascii",status="old",action="read")
n = 0
do
read(unit=11,*)
n = n+1
enddo
allocate(pos(3,n), mass(n), rho(n), vel(3,n))
do i = 1,n
read(unit=11,*) pos(:,i), mass(i), rho(i), vel(:,i)
enddo
close(unit=11)
end subroutine read_file
Первые 8 столбцов в моем файле ascii — это компоненты x, y, z положения, массы, плотности и компоненты скорости x, y, z, которые я читаю в массивы, с (1, n), (2, n), (3,n) — компоненты x, y и z соответственно, а n — количество частиц.
Что я делаю не так и как мне компилировать этот код?
Обновление: первая ошибка устранена, но по-прежнему возникает та же синтаксическая ошибка с оператором READ.
subroutine read_file(pos,mass,rho,vel,n)
integer :: i, n, ios
real, allocatable, intent(out) :: pos(:,:),mass(:),rho(:),vel(:,:)
open(unit=11,file="star.ascii",status="old",action="read")
n = 0
do
read(unit=11,*,iostat=ios) pos,mass,rho,vel
if (ios /= 0) exit
n = n+1
enddo
allocate(pos(3,n), mass(n), rho(n), vel(3,n))
rewind(11)
do i = 1,n
read(unit=11,*)pos(:,i),mass(i),rho(i),vel(:,i)
enddo
close(unit=11)
end subroutine read_file