我有一个关于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
答案 0 :(得分: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