READ语句不读取文件中的最后一个数字

时间:2013-11-26 16:01:23

标签: matrix fortran

假设你有这个程序

  1. 子程序readDIM,它从txt文件中读取矩阵的维度(行,列)。 (为了简化,让它成为INTEGER)。 ReadDIM使用令牌工作,它可以通过假设正常工作。
  2. 包含例如:

    的文本文件
    1 2 3 4
    1 2 20 5
    3 0 333 3
    

    返回nrow = 3, ncol = 4

    1. 由于readDIM给出了矩阵的真实维度,我想分配空间:

      REAL, DIMENSION (:,:), ALLOCATABLE :: vMatrix
      
    2. 从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循环引起的,但无法解释自己,也不知道如何修复它编写不同的代码。

1 个答案:

答案 0 :(得分:0)

因为txt文件的最后一行没有行结束,请尝试在最后一个数字后输入一个返回值。