0

正如标题所说,我有一个关于 f90 的问题。我有很多需要.dat处理的文件(比如 15 个文件,每个文件有 2 列和 2000 行)。我需要将所有数据保存在一个唯一的矩阵中(将有 30 列和 2000 行)。但是当我在执行过程中使用指令READ(21,*) MATRIX时,它会说

   Fortran runtime error: End of file

我认为这是因为矩阵的维度与单个数据文件的维度不同。有没有办法让它工作?是否可以在 DO 循环中打开所有数据文件,而无需多次重复 OPEN 语句?

这是代码

program expected

REAL*8, ALLOCATABLE, DIMENSION ( :, :) :: dati


OPEN (unit=20, status='OLD', file='PRINT_07.CSV', form='FORMATTED')
OPEN (unit=21, status='OLD', file='PRINT_08.CSV', form='FORMATTED')
OPEN (unit=22, status='OLD', file='PRINT_09.CSV', form='FORMATTED')
OPEN (unit=23, status='OLD', file='PRINT_10.CSV', form='FORMATTED')
OPEN (unit=24, status='OLD', file='PRINT_11.CSV', form='FORMATTED')
OPEN (unit=25, status='OLD', file='PRINT_12.CSV', form='FORMATTED')
OPEN (unit=26, status='OLD', file='PRINT_13.CSV', form='FORMATTED')
OPEN (unit=27, status='OLD', file='PRINT_14.CSV', form='FORMATTED')
OPEN (unit=28, status='OLD', file='PRINT_15.CSV', form='FORMATTED')
OPEN (unit=29, status='OLD', file='PRINT_16.CSV', form='FORMATTED')
OPEN (unit=30, status='OLD', file='PRINT_17.CSV', form='FORMATTED')
OPEN (unit=31, status='OLD', file='PRINT_18.CSV', form='FORMATTED')
OPEN (unit=32, status='OLD', file='PRINT_19.CSV', form='FORMATTED')
OPEN (unit=33, status='OLD', file='PRINT_20.CSV', form='FORMATTED')
OPEN (unit=34, status='OLD', file='PRINT_21.CSV', form='FORMATTED')


ALLOCATE ( dati(30,2000) )

READ(20,*) dati


end program    

在一个更简单的程序中,我以这种方式解决了数据导入问题。但是我仍然有一次打开多个数据文件的问题。

program mats

REAL, ALLOCATABLE, DIMENSION (:,:) :: mat


OPEN (UNIT=21, STATUS='OLD', file='mat1.dat', form='FORMATTED')
OPEN (UNIT=22, STATUS='OLD', file='mat2.dat', form='FORMATTED')

OPEN (UNIT=23, STATUS='UNKNOWN', file='mat.dat', form='FORMATTED')


DO i=1,2
OPEN (UNIT=20+i, STATUS='OLD', file= 'mat'i'.dat', form='FORMATTED')
END DO


ALLOCATE ( mat(5,2) )

mat=0

PRINT*, mat

  READ(21,*) mat(1:3,1:2)
  READ(22,*) mat(4:5,1:2)

PRINT*, mat

end program
4

1 回答 1

0

这是一个草图,让您了解如何以更优雅的方式处理多个文件。它不是您的问题的完全解决方案,也不是经过测试的——它显示了一些概念。

character (len=80) :: filename
   do i=7, 20
      write (filename, '( "PRINT_", I2.2, ".CSV" )' )  i
      open ( unit=55,file=filename, status="old", action="read", form="formattted" )
      read (55, datai (i,:) )
      close (unit=55)
    end do
于 2014-11-29T20:58:48.380 回答