我创建了一个看起来像这样的.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)。我有什么想法可以改变这个吗?
答案 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