Fortran Coder

标题: 更快的读入方式 [打印本页]

作者: jojo9    时间: 2021-10-21 11:01
标题: 更快的读入方式
请教论坛的各位前辈,
文件里面数据形式是:
...

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




作者: li913    时间: 2021-10-21 14:30
这样已经很好了,没有改进的余地。另一种就是修改输入文件,把大括号替换为空格。

作者: jojo9    时间: 2021-10-21 15:27
li913 发表于 2021-10-21 14:30
这样已经很好了,没有改进的余地。另一种就是修改输入文件,把大括号替换为空格。
...

好吧  那就没有办法了  感谢感谢
作者: fcode    时间: 2021-10-21 20:46
[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的优化本身就没什么空间。






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