假设你有这个程序
readDIM
,它从txt文件中读取矩阵的维度(行,列)。 (为了简化,让它成为INTEGER)。 ReadDIM
使用令牌工作,它可以通过假设正常工作。包含例如:
的文本文件1 2 3 4
1 2 20 5
3 0 333 3
返回nrow = 3, ncol = 4
由于readDIM
给出了矩阵的真实维度,我想分配空间:
REAL, DIMENSION (:,:), ALLOCATABLE :: vMatrix
从txt文件中读取矩阵并将其存储到2d阵列中。所以我写了以下内容
SUBROUTINE buildVMatrix
OPEN(UNIT=1, FILE = filename, STATUS ='OLD',IOSTAT=ios);
ALLOCATE(vMatrix(nrow,ncol));
WRITE(*,*) "Register matrix from file:", filename;
WRITE(*,*) "-------------------------------------------------------";
DO i = 1, UBOUND(vMatrix,1)
READ(1,*, IOSTAT = ios) (vMatrix(i,j),j=1,UBOUND(vMatrix,2));
!IF(ios /= 0 ) EXIT
END DO
CLOSE(1)
END SUBROUTINE
当我打印vMatrix
时,输出为:
matrix.txt : 1 2 3 4 buildVMatrix output (once printed) 1 2 3 4
1 2 20 5 1 2 20 5
3 0 333 3 3 0 333 0
它没有读取最后一个数字。我知道它是由DO
内的buildVMatrix
循环引起的,但无法解释自己,也不知道如何修复它编写不同的代码。
答案 0 :(得分:0)
因为txt文件的最后一行没有行结束,请尝试在最后一个数字后输入一个返回值。