过冷水给大家讲了好几期实战案例。但是最基本的文件操作,读取数据的函数使用方法没有给大家讲,只是一个没有思想的代码操作工,今天和大家剖析一下最常见的fopen、fread函数使用方法,先来看看
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函数
fwrite(fileID,A,precision,skip,machinefmt) %该命令还指定将字节或位写入文件的顺序
fileID:要写入内容的文件
A:待写入文件中内容
Skip:在写入每个值之前跳过skip指定的字节或位数
precision :写入文本到文件中的具体方式
precision:
一个简单的实例:
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能让人怀疑人生。最后过冷水想了一个混合方法:
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任你选