Fortran 公开及;读取多个.txt文件
我不熟悉fortran编程。我想打开多个.txt文件(CrossSec01到CrossSec10)并将可分配数组中的数据读取到单个文件中 我的代码在“读取”中给出了“文件结束错误”。有新手能帮我吗 这是我的密码:Fortran 公开及;读取多个.txt文件,fortran,fortran90,Fortran,Fortran90,我不熟悉fortran编程。我想打开多个.txt文件(CrossSec01到CrossSec10)并将可分配数组中的数据读取到单个文件中 我的代码在“读取”中给出了“文件结束错误”。有新手能帮我吗 这是我的密码: implicit none real(8), allocatable :: dat(:,:,:) ! a 3D array, no defined size yet integer :: i,j,k,m,n integer :: x
implicit none
real(8), allocatable :: dat(:,:,:) ! a 3D array, no defined size yet
integer :: i,j,k,m,n
integer :: x,y,z
open(unit=123,file="crossSec01.txt") ! opens 1st file reads & closes file
!read (100,20) ((dat(i,j,k)
read(123,*) y,x
z=30
close(123)
allocate (dat(i,j,k))
do k=1,z
write(str,'("crossSec",i2.2,".txt")')k
open(unit=345,file=str,status="old")
read(345,*)
read(345,*)
read(345,*)
do i = 1,y
read(345,*)(dat(i,j,k),j=1,x) ! This is where I get my fortran runtime error "end of file" error.
end do
close(345)
end do
我认为这就是错误发生的地方。您正在使用维度
i,j,k
分配数组dat
,但是i,j,k
尚未初始化。此时i,j和k的值为零。这将使数组dat
为零维,并且您无法向其中写入任何内容。我想您是在尝试执行allocate(dat(y,x,z))
是I
、j
和k
分配语句时已知/初始化的吗?您是否从文件中读取了正确数量的元素?首先,我会将stat
/iostat
添加到所有I/O语句和allocate
中,以查看每个操作是否成功。显然,您希望第一个维度是y,第二个x和第三个z,但在allocate语句中有I,j,k。谢谢M.S.B代码工作正常。干杯。这个答案是@MSB对上述问题评论的扩展。这没什么错。但答案中有一个小错误:如果i,j,k
没有初始化,也没有分配给,则无法保证在执行allocate
语句时它们将具有值0
。
allocate (dat(i,j,k))