.txt文件必须具有什么样才能从中读取数据?

时间:2016-10-29 17:28:53

标签: io fortran

我创建了一个看起来像这样的.txt文件

4 4 4 !DIM_M, DIM_L, DIM_N
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
2 20  !DIM_START, DIM_END

但重点是,如果我现在添加一些评论,比如我使用的矩阵名称,那么我会收到一些错误,即

4 4 4 !DIM_M, DIM_L, DIM_N
1 2 3 4 !A
5 6 7 8
9 10 11 12
13 14 15 16
1 2 3 4 !B
5 6 7 8
9 10 11 12
13 14 15 16
2 20  !DIM_START, DIM_END

它不再起作用了。我用来读取.txt文件的Fortran文件是

    ! OPEN FILE
    OPEN(UNIT=39, STATUS='OLD', ACTION='READ',FILE='input.txt',IOSTAT=IERROR)
    !READ DIMENSIONS + CHECK IF SUCCESFUL
    READ(39,*,IOSTAT=IERROR)DIM_M, DIM_L, DIM_N
    ALLOCATE(A(DIM_M,DIM_L),B(DIM_L,DIM_N), C(DIM_M,DIM_N), STAT=IERROR)
    READ (39,*, IOSTAT=IERROR)A
    READ (39,*, IOSTAT=IERROR)B
    READ (39,*) DIM_START, DIM_END
    CLOSE(UNIT=39)

我遗漏了检查文件是否有效的所有部分(使用IOSTAT)。我有什么想法可以改变这个吗?

2 个答案:

答案 0 :(得分:0)

以字符串形式阅读,然后只使用字符串中的部分直到"!"用于读取变量。

由于您提供了非编译示例,我将以实物形式回复。

! OPEN FILE
CHARACTER(LEN=132) :: ALine
CHARACTER(LEN=1), PARAMETER :: Bang '!'
OPEN(UNIT=39, STATUS='OLD', ACTION='READ',FILE='input.txt',IOSTAT=IERROR)
!READ DIMENSIONS + CHECK IF SUCCESsFUL
READ(39,*,IOSTAT=IERROR) ALine
IF(INDEX(ALine,bang) > 0) THEN
  READ(ALine(1:INDEX(ALine,'!')-1) ,*,IOSTAT=IERROR) DIM_M, DIM_L, DIM_N
ELSE
  READ(ALine ,*,IOSTAT=IERROR) DIM_M, DIM_L, DIM_N
ENDIF
ALLOCATE(A(DIM_M,DIM_L),B(DIM_L,DIM_N), C(DIM_M,DIM_N), STAT=IERROR)
!Etc

答案 1 :(得分:0)

如果总有DIM_M,则一行上的DIM_L数字只能在循环中读取

do l = 1, dim_l
  read(39,*,iostat=ierror) A(:,l)
  if (ierror /= 0) do something
end do

do n = 1, dim_n
  read(39,*,iostat=ierror) A(:,n)
  if (ierror /= 0) do something
end do