Fortran Coder

查看: 1218|回复: 4
打印 上一主题 下一主题

[文件读写] 关于二进制文件直接跳跃读取

[复制链接]

48

帖子

13

主题

0

精华

熟手

F 币
205 元
贡献
98 点
跳转到指定楼层
楼主
发表于 2023-11-15 11:53:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个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
可否直接读取不用循环
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2023-11-15 12:58:32 | 只看该作者
文本文件不行。

48

帖子

13

主题

0

精华

熟手

F 币
205 元
贡献
98 点
板凳
 楼主| 发表于 2023-11-15 15:02:23 | 只看该作者
li913 发表于 2023-11-15 12:58
文本文件不行。

不是文本文件,纯粹是二进制文件

2022

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1598 元
贡献
689 点

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

地板
发表于 2023-11-15 19:16:31 | 只看该作者
用循环就好了。
如果嫌麻烦,可以自己根据需要把循环写在一个函数里,甚至函数名也可以叫 fread。
如果你是觉得循环比较慢,那么matlab的fread函数内部,应该也是用了循环的。

48

帖子

13

主题

0

精华

熟手

F 币
205 元
贡献
98 点
5#
 楼主| 发表于 2023-11-15 20:00:57 | 只看该作者
fcode 发表于 2023-11-15 19:16
用循环就好了。
如果嫌麻烦,可以自己根据需要把循环写在一个函数里,甚至函数名也可以叫 fread。
如果你是 ...

其实还是看数据大小, 数组不大的话, 整体读取, 再抽取也比循环快, 但数据大了, 比如10M以上, 循环就要快些
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-23 10:34

Powered by Tencent X3.4

© 2013-2024 Tencent

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