我正在尝试读取 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
我的 ascii 文件中的前 8 列是位置、质量、密度的 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