jojo9 发表于 2021-10-21 11:01:19

更快的读入方式

请教论坛的各位前辈,
文件里面数据形式是:
...

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

...

用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:42

这样已经很好了,没有改进的余地。另一种就是修改输入文件,把大括号替换为空格。

jojo9 发表于 2021-10-21 15:27:55

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

好吧那就没有办法了感谢感谢:-)

fcode 发表于 2021-10-21 20:46:21

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的优化本身就没什么空间。

页: [1]
查看完整版本: 更快的读入方式