Fortran Coder

标题: 关于二进制文件直接跳跃读取 [打印本页]

作者: cqflhl    时间: 2023-11-15 11:53
标题: 关于二进制文件直接跳跃读取
一个3维数组, 比如A(m,n,k), 想直接读取某个下标的一维数据A(i,j,:)
以前的做法是读取整个数组, 然后再抽取.
有没有办法直接跳跃读取, 因为间隔是知道的, Matlab 里面 fread 有个 fread(fileID,sizeA,precision,skip,machinefmt), 其中skip 就是间隔跳跃
如果用流文件读取倒是可以
do i=1,k; read(99,pos=?)A(i,j,?); end
可否直接读取不用循环

作者: li913    时间: 2023-11-15 12:58
文本文件不行。
作者: cqflhl    时间: 2023-11-15 15:02
li913 发表于 2023-11-15 12:58
文本文件不行。

不是文本文件,纯粹是二进制文件
作者: fcode    时间: 2023-11-15 19:16
用循环就好了。
如果嫌麻烦,可以自己根据需要把循环写在一个函数里,甚至函数名也可以叫 fread。
如果你是觉得循环比较慢,那么matlab的fread函数内部,应该也是用了循环的。
作者: cqflhl    时间: 2023-11-15 20:00
fcode 发表于 2023-11-15 19:16
用循环就好了。
如果嫌麻烦,可以自己根据需要把循环写在一个函数里,甚至函数名也可以叫 fread。
如果你是 ...

其实还是看数据大小, 数组不大的话, 整体读取, 再抽取也比循环快, 但数据大了, 比如10M以上, 循环就要快些




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