Fortran Coder

查看: 8817|回复: 4

[文件读写] 求助文件读写

[复制链接]

15

帖子

6

主题

0

精华

熟手

F 币
170 元
贡献
72 点
发表于 2018-9-26 10:29:22 | 显示全部楼层 |阅读模式
一个文件有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
这个是什么问题,怎么修改啊?谢谢。

796

帖子

2

主题

0

精华

大宗师

F 币
3787 元
贡献
2266 点
发表于 2018-9-26 12:59:28 | 显示全部楼层
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

15

帖子

6

主题

0

精华

熟手

F 币
170 元
贡献
72 点
 楼主| 发表于 2018-9-26 14:53:20 | 显示全部楼层
谢谢,知道了,原来是这个问题啊。

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2018-9-26 20:35:02 | 显示全部楼层
这样可以更简洁
[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

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

发表于 2018-9-26 22:34:03 | 显示全部楼层
湊個熱鬧

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 解釋
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-19 08:16

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表