从输入文件中读取未知大小的数组

时间:2018-03-22 11:28:42

标签: fortran

我想从输入文件中读取维度(n,n)的矩阵An是一个变量且n <= 50。为了测试,我采用了一个示例矩阵:

5.0   6.0   7.0
4.0   3.0    8.0
1.0   4.0    2.0

我希望使用以下代码以相同的格式阅读它:
但是当我编译它时,我收到了错误:

  

在文件partial_pivot.f90的第15行(unit = 9,file ='gaussj.inp')   Fortran运行时错误:文件结束。

如何解决这个问题?

program gaussj
implicit none
integer::i,j,n
integer,parameter::nmax=50
real,dimension(nmax,nmax)::A


 open(unit=9,file='gaussj.inp',status='old')
 n = 0
 do i = 1,nmax
   n = n+1

   read(9,*)(A(i,j),j = 1,nmax)


 end do
 close(9)

 write(25,*)((A(i,j),j=1,n),i=1,n)
end program

1 个答案:

答案 0 :(得分:1)

在这种情况下,如果你想假设它是一个正方形数组,(并且文件中没有其他内容)你可以通过计算行来获得维度。

  implicit none
  integer i,n,stat
  real x
  real,allocatable::a(:,:)
  open(20,file='test.dat')
  n=-1
  stat=0
  do while(stat == 0)
     n=n+1
     read(20,*,iostat=stat)x
  enddo
  write(*,*)n
  allocate(a(n,n))
  rewind(20)
  read(20,*)a
  a=transpose(a)
  do i=1,n
     write(*,*)A(i,:)
  enddo
  end
相关问题