Fortran Coder

标题: 求助文件读写 [打印本页]

作者: phost    时间: 2018-9-26 10:29
标题: 求助文件读写
一个文件有n行
基本格式是:
06/06/2018 15:00:10.000 1.3683691E+0001 2.4744379E+0001 -1.7999999E-0002 4.9999999E-0003

我用read(3,101) a,b,c,d,e,f
101 format(a10,1x,a12,4(1x,e15.7))

前4个数据是正确的,可是后面的2个数据变成-1.8 和5.0
这个是什么问题,怎么修改啊?谢谢。

作者: li913    时间: 2018-9-26 12:59
101 format(a10,1x,a12,2(1x,e15.7),1x,e16.7,1x,e15.7)
更好改为:
[Fortran] 纯文本查看 复制代码

character(100) str,a,b
real c,d,e,f
read(3,"(a)") str
a = str(1:10)
b = str(12:23)
read(str(24:),*) c,d,e,f
write(*,*) trim(a),' ',trim(b)
write(*,*) c,d,e,f
pause
end

作者: phost    时间: 2018-9-26 14:53
谢谢,知道了,原来是这个问题啊。
作者: vvt    时间: 2018-9-26 20:35
这样可以更简洁
[Fortran] 纯文本查看 复制代码
character(100) str,a,b
real c,d,e,f
read(3,"(a10,a100)") a,str
read(str,*) b,c,d,e,f
write(*,*) trim(a),' ',trim(b)
write(*,*) c,d,e,f

作者: chiangtp    时间: 2018-9-26 22:34
湊個熱鬧

1. for READ (尤其是 numeric data), 用 list direct (free) format 保證不會讀錯, 用 formatted format 就不保證

2. 如果 data entry-line, character data 為 "..." or '...' (加delimiters單雙引號)
    "06/06/2018" "15:00:10.000" 1.3683691E+0001 2.4744379E+0001 -1.7999999E-0002 4.9999999E-0003
   
[Fortran] 纯文本查看 复制代码
CHARACTER(80) :: a, b
REAL :: c, d, e, f
READ(11,*) a, b, c, d, e, f ! list-direct-format to read all data


3. 補充 vvt 的回覆:
    for list-direct format, data entry line 的 "/" (slash) 符號, 語法上 不是 data, 而是 control-code 作 ending reading 解釋




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2