首页/文章/ 详情

深入浅出MATLAB数据处理之文件读写

3年前浏览3349

image.png

        原创文章,作者过冷水,未经授权,禁止私自转载,转载请联系作者,如果您希望加入Matlab仿真秀官方交流群和资料下载可加群:927550334

        过冷水给大家讲了好几期实战案例。但是最基本的文件操作,读取数据的函数使用方法没有给大家讲,只是一个没有思想的代码操作工,今天和大家剖析一下最常见的fopen、fread函数使用方法,先来看看

fileID = fopen(filename,permission,machinefmt,encodingIn)

该函数的作用是打开一个文件,我们重点需要看的是参数设置,对我们后续操作的影响。

Permission:文件访问类型,这个很简答,就是描述你想对这个文件进行什么操作。它的类型有:

image.png

参数要和其它函数命令结合才能看出效果,暂时先不不进行演示。

Machinefmt:表示

图片

过冷水之前的工作中就有判断文件数据储存数据顺序类型。所以该参数具有较强的实用性。

    存储顺序 :存储顺序是指存储在计算机内存中的地址顺序。例如,一个四字节整形数据0x0A0B0C0D,高字节数据(0x0A)存储在高地址,低字节数据(0x0D)存储在低地址。 高地址、低地址的概念不能在拓展了,入局太深出不来。阅读顺序 阅读顺序就是人们习惯的看文字的顺序。还用“存储顺序”中的4字节整形数据来说明,0x0A0B0C0D为16进制表示形式,阅读顺序为从左到右(高字节到低字节)。在调试程序或编写程序经常看到或用到这样的常量,其实就是一个数据的表示形式,这个形式遵从人们的阅读习惯。 

2. Little Endian 与 Big Endian 从字面讲,Little Endian就是说小数据(此处的小为阅读顺序中的低字节数据:0x0D)存储在前端(内存中的低地址)。Big Endian就是说大数据(此处的大为阅读顺序中的高字节数据:0x0A)存储在前端(内存中的低地址)。little endian :地址:高 -> 低, 0D 0C 0B 0A big endian 地址:高 -> 低, 0A 0B 0C 0D 

其余的几个参数含义实用较少,过冷水就不进行讲解了。这里要

主要是储存数据的先后顺序和打开数据的先后顺序要匹配,不然就会报错。

image.png

encodingIn:具体编码形式。咱不太懂,咱也不能乱讲。告诉大家有哪些编码形式就行了。

image.png


这些参数都很关键,其实主要涉及到跨平台操作的问题,python或者其它编译软件处理的文件现在matlab需要处理,那么就必须字节顺序、编译方式要一致,不然自然得不到我们想要的结果。

Fopen函数讲完了,现在讲讲fwrite函数

image.png

fileID:要写入内容的文件

A:待写入文件中内容


Skip:在写入每个值之前跳过skip指定的字节或位数

precision :写入文本到文件中的具体方式

precision:

image.png

一个简单的实例:

image.png

图片

图片上给出了不同precision设置值的代码,写入到文本中的值不同,使用int8写入数据,后面的字符“爱好者与你一起成长”因为不符合格式要求不能写入文本。不同参数值使得写人的文本类型是不同的,precision参数设置是实用价值较大的一个参数,过冷水在这里只起到一个抛引玉的作用,这方面知识了解的比较深,有能力给大家讲清楚的读者可以可以和大家分享心得,“你的快乐我一半”。

过冷水想给家讲的是自己在实际应用中遇到的一个问题。

图片



把这两个文件路径以文本的形式写入文本中,方便python依据路径读取文件。看似就是一个简单写入数据过程,之前已经演示过了,为何还要提这个问题呢?“细节处见功夫”。该文件写入涉及到换行命令?看所谓的百度知道如何解决这个问题。

图片

图片

图片

图片



显然网上相关资料很多,过冷水只需要照猫画虎去做就行了,这个问题so easy!照着他们的方法尝试即可。

图片

图片

两个函数函数一个是不能正确换行,一个是不能正确写入字符串,看来网上的专家分享心得的时候讲的不够详细,等到具体做参考时,总是不能正确使用,幸亏你们点开matlab爱好者公众号,遇到了过冷水给你们曝露问题,走过你们没有走过的坑,让你们没的坑走。回头来自己自己说matlab编程很精通吗?一个半罐水去否定另一个半罐水,这是不对的。假设他们说的是对的呢?万一我的电脑有故障呢?过冷水又尝试了一下。

图片

看来网上专家说的是对的。but我的问题为何不能用fprintf()写入文本呢?最后过冷水才搞懂是“C:\...”识别过程出了错。所以编程是一门玄而又玄的科学,各种莫名其妙的bug能让人怀疑人生。最后过冷水想了一个混合方法:


image.png


该段代码成功解决了我的疑惑。

关于fwrite函数的实际应用过冷水就讲这么多。后期遇到新的用法会继续补充。二进制文本读写数据中fprintf、fread这两个函数也是经常使用的函数,读者若是感兴趣且听我下次分解。

        原创文章,作者过冷水,未经授权,禁止私自转载,转载请联系作者,如果您希望加入Matlab仿真秀官方交流群和资料下载可加群:927550334

精品回顾>>>>>>

过冷水带你用matlab制作演示动画

用matlab实现复杂累计求和的展开(程序分享)

matlab插值拟合工具箱使用简介

MATLAB/ADAMS求解动力学

如何用matlab进行数据分析

image.png

理论科普代码&命令MATLAB
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2021-03-18
最近编辑:3年前
过冷水
博士 | 讲师 讨论号:927550334
获赞 361粉丝 184文章 107课程 11
点赞
收藏
作者推荐

免费 5.0
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈