Matlab R2013b多维数据写入及CSV首行追加问题求助
解决Matlab R2013b中的两个文件写入问题
嘿,针对你遇到的两个Matlab问题,我给你整理了具体的解决方案:
一、给CSV文件首行追加单个数字(而非底部)
Matlab的dlmwrite确实没法直接在文件开头插入内容,不过我们可以通过先读取原文件内容,再重新构造写入的方式实现需求:
读取现有CSV的全部内容:
% 打开原CSV文件读取内容 fid = fopen('blah.csv', 'r'); % 按行读取所有内容到单元格数组 original_lines = textscan(fid, '%s', 'Delimiter', '\n'); original_lines = original_lines{1}; fclose(fid);构造新的内容(首行是目标数字,后面跟上原内容):
n = 99; % 替换成你要添加的数字 % 把数字转成字符串,作为第一行 new_lines = [num2str(n); original_lines];将新内容写入CSV文件(覆盖原文件):
fid = fopen('blah.csv', 'w'); % 逐行写入 fprintf(fid, '%s\n', new_lines{:}); fclose(fid);
这样处理后,CSV的首个单元格就是你要的数字,原来的100×100内容紧随其后。
二、解决单元格数组写入TXT时的报错问题
dlmwrite只支持纯数值矩阵作为输入,你的单元格数组包含数字和字符串,自然会报错。我们可以用两种方法解决:
方法1:自定义转换函数处理混合类型
首先写一个小函数,用来把单元格里的元素统一转成字符串:
function elem_str = convert_to_str(elem) if ischar(elem) elem_str = elem; % 本身是字符串直接保留 else elem_str = num2str(elem); % 数字转成字符串 end end
然后用循环逐行写入TXT:
fid = fopen('blah.txt', 'w'); % 遍历单元格数组的每一行 for row_idx = 1:size(alldat, 1) % 把当前行的所有元素转成字符串,用空格分隔 row_content = strjoin(cellfun(@convert_to_str, alldat(row_idx,:), 'UniformOutput', false), ' '); fprintf(fid, '%s\n', row_content); end fclose(fid);
方法2:利用writetable(R2013b支持)
如果你觉得循环麻烦,也可以把单元格数组转成table,再用writetable写入:
% 把单元格数组转成table,默认列名是Var1、Var2... tbl = cell2table(alldat); % 写入TXT,指定分隔符为空格,不输出列名 writetable(tbl, 'blah.txt', 'Delimiter', ' ', 'WriteVariableNames', false);
这个方法更简洁,适合快速处理。
内容的提问来源于stack exchange,提问作者new2matlab
相关产品推荐
相关产品推荐

