.dat文件写入byte类型数组_深入浅出MATLAB数据处理之文件读写

873439dbf4defa08bef29cb0c3facee8.png

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

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

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

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

20f0dbf5ad100c8f41770f5fbf612ce7.png

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

Machinefmt:表示

8ca61ef22c0eb4d1610b686cffafeea8.png

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

    存储顺序 :存储顺序是指存储在计算机内存中的地址顺序。例如,一个四字节整形数据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 

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

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

8da71f18b38819077c08764210e26925.png

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

ab879448d2ea6f01e9fcf99cb0b5fd5c.png

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

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

fwrite(fileID,A,precision,skip,machinefmt) %该命令还指定将字节或位写入文件的顺序

fileID:要写入内容的文件

A:待写入文件中内容

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

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

precision:

58978c3cccdf7be270ab0b5735ee9dd7.png

一个简单的实例:

fileID=fopen('test.dat','w','b')str=['matlab爱好者与你一起成长'];fwrite(fileID,str,'char');fclose(fileID);

4f0c749d14e4d8cc0510a60d891ee987.png

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

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

65d17277b5bf5bd1cf8efccb14ec2bbc.png

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

c03c751dc3d261fdcd2f3381fb73dd83.png

b17c3f0416b4525ec91cf5ab8f30e21e.png

ed08d86e74d8234cb7ba93eb6a227e47.png

9df06305a78e30350b9854ecb7650b04.png

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

f7ed7747642d31d674e5aab7bc70ef7b.png

bd2b9cf0935270ef825f59ac5a19d501.png

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

96c7a5bb38b0289ad4ac8d11b87a24d3.png

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

outName='C:\Users\wayne\Desktop\PVOX1\PVOX\SAMPLE_TEST\parsec_grid0_4.out'datName='C:\Users\wayne\Desktop\PVOX1\PVOX\SAMPLE_TEST\parsec_grid0_4.dat'fName = fopen('test.dat','wt');fwrite(fName,outName);fprintf(fName,'\n');fwrite(fName,datName);fclose(fName);

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

关于fwrite函数的实际应用过冷水就讲这么多。后期遇到新的用法会继续补充。二进制文本读写数据中fprintf、fread这两个函数也是经常使用的函数,读者若是感兴趣且听我下次分解。关注过冷水的函数解析推文,让你豁然开朗,关注matlab爱好者公众号,一个带你出坑的知识分享平台。

往期回顾>>>>>>

MATLAB实现Excel中lookup函数查找匹配功能

PCOX-自定义函数wfnread分析

数值计算——MATLAB数值积分原理详讲

200多款plot/plot3自定义marker任你选

1675797b9d1e320a2086a2c06ae6542c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值