Fortran Coder

查看: 6908|回复: 3
打印 上一主题 下一主题

[文件读写] 更快的读入方式

[复制链接]

35

帖子

11

主题

0

精华

熟手

F 币
241 元
贡献
140 点
跳转到指定楼层
楼主
发表于 2021-10-21 11:01:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教论坛的各位前辈,
文件里面数据形式是:
...

4{123 1234 12345 23456}   !第一个数指定这括号里有几个数
3{1234 12345 12345}         !第一个数是个位数,也就是说从第三个字符开始是数据
5{123 1234 12345 123456} !每行的数字个数可能有变化

...

用Fortran读入,我是这么实现的,但是效率比较低,想请教下大家有更好的写法吗?
[Fortran] 纯文本查看 复制代码
ibeg = 1
do i = 1, nLines   !nLines:行数
    read(12, "(a128)") cLine
    read(cLine(1: 1), *) n
    read(cline(3: len_trim(cLine)-1), *) Aarray(ibeg : ibeg + n - 1)
    ibeg = ibeg + n
end do



分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

797

帖子

2

主题

0

精华

大宗师

F 币
3790 元
贡献
2267 点
沙发
发表于 2021-10-21 14:30:42 | 只看该作者
这样已经很好了,没有改进的余地。另一种就是修改输入文件,把大括号替换为空格。

35

帖子

11

主题

0

精华

熟手

F 币
241 元
贡献
140 点
板凳
 楼主| 发表于 2021-10-21 15:27:55 | 只看该作者
li913 发表于 2021-10-21 14:30
这样已经很好了,没有改进的余地。另一种就是修改输入文件,把大括号替换为空格。
...

好吧  那就没有办法了  感谢感谢

1958

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1341 元
贡献
565 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2021-10-21 20:46:21 | 只看该作者
[Fortran] 纯文本查看 复制代码
do i = 1, nLines
    read(12, "(i1,1x,a128)") n , cLine
    read(cline(:len_trim(cLine)-1),*) Aarray(ibeg : ibeg + n - 1)
    ibeg = ibeg + n
end do

这样少一个 read,但是我估计提升可能并不明显
IO的优化本身就没什么空间。

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-25 06:36

Powered by Tencent X3.4

© 2013-2024 Tencent

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