使用Matlab生成CSV文件格式异常,求问题排查及解决方法
Matlab生成CSV格式不符合预期的解决方法
问题根源
- 核心原因是Matlab的
fprintf读取cell数组元素时默认采用列优先遍历规则:你构造的data2为3行3列的结构,按列展开后元素顺序为'st'、'qe'、'qr'、10、20、30、15、25、35,和你定义的%s %d %d格式要求的「字符串+整数+整数」逐行匹配的顺序完全不符,导致输出错乱。 - 次要问题是CSV标准分隔符为逗号,你当前使用空格作为分隔符、表头未按逗号拆分,也不符合CSV格式要求。
- 初始变量
station的定义存在多余逗号的语法小问题,也会干扰后续拼接逻辑。
修正方案
调整格式符为逗号分隔,写入时将data2转置后再展开即可匹配遍历顺序,修正后代码如下:
% 初始变量定义 station = {'st';'qe';'qr'}; % 去掉多余语法逗号 header = 'where,QE,QR'; % 表头改为逗号分隔匹配CSV规范 data = [10 15;20 25;30 35]; % 写入文件逻辑 ofn = 'set.csv'; ofid = fopen(ofn,'w'); fmt = '%s,%d,%d\n'; % 格式符用逗号作为分隔符 data = num2cell(data); data2 = [station data]; fprintf(ofid,'%s\n',header); fprintf(ofid,fmt,data2.'{:}); % 转置data2后展开,适配列优先遍历逻辑 fclose(ofid);
执行后生成的CSV内容如下,符合预期:
where,QE,QR st,10,15 qe,20,25 qr,30,35
内容的提问来源于stack exchange,提问作者Kim Young Jun
相关产品推荐
相关产品推荐

