前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入浅出MATLAB数据处理之文件读写

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

作者头像
巴山学长
发布2020-06-02 14:35:58
6810
发布2020-06-02 14:35:58
举报
文章被收录于专栏:巴山学长巴山学长

今天和大家剖析一下最常见的fopen、fread函数使用方法,先来看看

代码语言:javascript
复制
fileID = fopen(filename,permission,machinefmt,encodingIn)

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

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

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

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

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

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

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

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

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

代码语言:javascript
复制
fwrite(fileID,A,precision,skip,machinefmt) 
%该命令还指定将字节或位写入文件的顺序

fileID:要写入内容的文件

A:待写入文件中内容

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

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

precision:

一个简单的实例:

代码语言:javascript
复制
fileID=fopen('test.dat','w','b')
str=['matlab爱好者与你一起成长'];
fwrite(fileID,str,'char');
fclose(fileID);

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

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

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

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

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

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

代码语言:javascript
复制
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函数的实际应用过冷水就讲这么多。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档