OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5473|回复: 5

FATFS如何将文件指针指向某一行的开头

[复制链接]

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
发表于 2021-1-25 16:01:35 | 显示全部楼层 |阅读模式
30金钱
我已经使用FATFS写入了一些数据,假设格式如下(*代表数值),

1,***,***,**,****,**,*****,***,**
2,***,**,****,***,**,**,
3,****,**,****,***,**,*****,**,


上面数据中每一行的数据长度不一定相等,且各数据都有的范围和正负都有变化,但是每一行会有单独的序号做对应。
我想执行f_read读出某一行的数据,但在这之前,必须得将文件指针指向该行,那么使用f_lseek的参数该如何设置,或者是否有其他方法可以将文件指针指向该行?

最佳答案

查看完整内容[请看2#楼]

若是没有专门的函数,那就从头开始读呗,读一块,搜索一下\r\n,记录行号,再读一块...... 若是内存够大,将整个文件读出来再处理也行。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3387

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8632
金钱
8632
注册时间
2020-5-11
在线时间
4070 小时
发表于 2021-1-25 16:01:36 | 显示全部楼层
若是没有专门的函数,那就从头开始读呗,读一块,搜索一下\r\n,记录行号,再读一块......
若是内存够大,将整个文件读出来再处理也行。
专治疑难杂症
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2021-1-25 17:25:55 | 显示全部楼层
LcwSwust 发表于 2021-1-25 17:16
若是没有专门的函数,那就从头开始读呗,读一块,搜索一下\r\n,记录行号,再读一块......
若是内存够大, ...

目前就是这么处理的,但是感觉不够灵活,要是存的数据比较多,要搜索到最后一行,要花的时间就很恐怖了
回复

使用道具 举报

12

主题

3387

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8632
金钱
8632
注册时间
2020-5-11
在线时间
4070 小时
发表于 2021-1-25 18:27:04 | 显示全部楼层
本帖最后由 LcwSwust 于 2021-1-25 18:28 编辑
142zjb 发表于 2021-1-25 17:25
目前就是这么处理的,但是感觉不够灵活,要是存的数据比较多,要搜索到最后一行,要花的时间就很恐怖了

不知你的具体应用是什么,应当可以优化的,
比如以固定长度存储一条记录,或固定位置存储,
记录前加序号,以二分法快速查找.

专治疑难杂症
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2021-1-25 18:46:28 | 显示全部楼层
既然用了文件系统,那就用文件系统的方式
回复

使用道具 举报

41

主题

226

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
481
金钱
481
注册时间
2017-7-29
在线时间
233 小时
 楼主| 发表于 2021-1-26 08:35:24 | 显示全部楼层
LcwSwust 发表于 2021-1-25 18:27
不知你的具体应用是什么,应当可以优化的,
比如以固定长度存储一条记录,或固定位置存储,
记录前加序号, ...

存储的数据分行的固定格式不能动,现在难点就是序号对应数据长度不清楚,有考虑用flash额外存储对应的序号和长度,查找时直接根据对应序号累计长度,将指针移动至目标位置,不过得额外加flash,暂时还没有尝试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-14 09:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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