【发布时间】:2011-03-10 17:51:50
【问题描述】:
考虑一下这个程序,
PROGRAM FOO
CHARACTER(LEN=25) :: INP
CHARACTER(LEN=50) :: C
INP = 'The quick brown fox ...'
READ (INP, '(A)') C
WRITE (*, '(''['', A, '']'')') C
STOP
END
这会输出 52 个字符,
[The quick brown fox ... ]
我希望它输出任何放入 C 数组的 READ 语句,而不是 C 缓冲区中的所有额外空间。
在上述情况下,我希望输出为[The quick brown fox ...],或者在READ 语句使用(A5) 而不是(A) 格式的情况下,那么我希望输出成为[The q]
我想查看READ 语句中使用的任意格式的结果
我该怎么做?
更新
既然这似乎不能直接实现,是否可以用一些深奥的字符(即~)预填充字符变量,然后用READ 语句覆盖?
到目前为止,我的尝试似乎被 Fortran READ 语句覆盖,即
PROGRAM FOO
CHARACTER(LEN=50) :: INP
CHARACTER(LEN=50) :: C
C = REPEAT('~', 50)
INP = 'The quick brown fox ...'
READ (INP, '(TR50, A1)') C
WRITE (*, '(''['', A, '']'')') C
STOP
END
! Outputs [<50 blanks>] rather than [<50 tildas>] or [ <49 tildas>]
! which would tell me if Fortran always reads a number of characters
! equal to the specified width or never reads any characters beyond
! the end of the record
! n.b. I am interested in actual output for individual platforms,
! not what the spec says
【问题讨论】: