MATLAB中的csvwrite函数写入问题
日常工作中,我们通常要把处理的数据导出,而csv文件以其简易读取的特点被大量采用。笔者在使用MATLAB导出csv文件时遇到了很多坑,今天就记录下来,以便以后查询。也希望本文能帮助到有需求的小伙伴。
MATLAB中的csvwrite函数
MATLAB中的csvwrite函数定义为:
// Write a comma-separated value file.
csvwrite(FILENAME,M);// writes matrix M into FILENAME as comma-separated values.
csvwrite(FILENAME,M,R,C);//writes matrix M starting at offset row R, and column C in the file.
其实也就两种用法:
- 将矩阵写入CSV文件中 ,一次性写入,方便快捷;
- 将矩阵以指定行列写入CSV文件中 ,行列从0开始。
但是值得注意的是:
- 一次只能写入一个矩阵 ,不能同时写入多个矩阵;
- 不能写入元胞数组 ,文件的数值形式比较单一;
- 只能一次性写入,重复写入即覆盖之前的内容。
- 数值的精度比较低。
改进方式
使用dlmwrite函数和writetable函数,函数用法这里不做多讲。这两个函数也有一定的缺点。
1.dlmwrite函数虽能增加精度也能在不清除之前内容的方式增加文件内容,但是增加文件内容只能在行之后增加,不能在列之后增加。
相关链接:https://ww2.mathworks.cn/matlabcentral/answers/28667-how-to-append-data-or-values-to-an-existing-csv-file.
2.使用writetable函数能输入列标题,但是不能输入行标题。
相关链接:[https://www.zhihu.com/question/39707220]
终极方式
试了一大圈,感觉都有局限,还是使用最初级的fprintf函数吧。示例代码:
// Create a csv file
fid=fopen('test.csv','a');
if fid<0
errordlg('File creation failed','Error');
end
//Write the data
str=["Height","Width","Length"];
data=[12,22,34];
for i=1:3
fprintf(fid,'%s,%d\n',str(i),data(i));
end
fclose(fid);
测试通过!