You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab R2013b多维数据写入及CSV首行追加问题求助

解决Matlab R2013b中的两个文件写入问题

嘿,针对你遇到的两个Matlab问题,我给你整理了具体的解决方案:

一、给CSV文件首行追加单个数字(而非底部)

Matlab的dlmwrite确实没法直接在文件开头插入内容,不过我们可以通过先读取原文件内容,再重新构造写入的方式实现需求:

  1. 读取现有CSV的全部内容:

    % 打开原CSV文件读取内容
    fid = fopen('blah.csv', 'r');
    % 按行读取所有内容到单元格数组
    original_lines = textscan(fid, '%s', 'Delimiter', '\n');
    original_lines = original_lines{1};
    fclose(fid);
    
  2. 构造新的内容(首行是目标数字,后面跟上原内容):

    n = 99; % 替换成你要添加的数字
    % 把数字转成字符串,作为第一行
    new_lines = [num2str(n); original_lines];
    
  3. 将新内容写入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:34:22