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

Matlab使用fwrite追加CSV内容时如何解决行粘连换行问题

问题原因

行粘连的核心诱因是部分CSV文件末尾未携带换行符,直接将读取到的字符流写入输出文件时,后一个文件的首行会直接拼接在前一个文件的末行字符后,不会自动断行。
fwrite本身完全支持写入换行:你当前以wt文本模式打开输出文件,写入\n时Matlab会自动适配操作系统对应的换行格式,不存在不支持的问题。

修正方案

在每次写入单个CSV的完整内容后,增加末尾换行符检查:如果当前文件内容末尾没有换行符,就补写一个换行,既解决行粘连问题,也不会在文件末尾本身有换行的情况下额外多出空行。
另外建议读取输入CSV时也指定rt(文本读取)模式,自动统一不同系统生成的CSV换行符格式,避免判断逻辑出错;同时补全边界情况处理,避免单文件选择、文件打开失败时脚本报错。

修正后的完整代码如下:

[filenames, folder] = uigetfile('*.csv','Select the data file','MultiSelect','on');   

% 处理仅选中单个文件的边界情况
if ischar(filenames)
    filenames = {filenames};
end

% 在同目录下创建输出文件
outputFileName = fullfile(folder, 'new_file.csv');
fidOutput = fopen(outputFileName, 'wt');          
% 增加输出文件打开失败判断
if fidOutput == -1
    error('输出文件创建失败,请检查文件夹写入权限');
end

for k = 1 : length(filenames)
    % 获取当前待合并文件路径
    thisFileName = fullfile(folder, filenames{k});
    % 以文本模式打开输入文件
    fidInput = fopen(thisFileName, 'rt');
    if fidInput == -1
        warning('文件%s打开失败,已跳过', thisFileName);
        continue
    end
    % 读取文件全部文本内容
    thisText = fread(fidInput, '*char').';
    % 写入内容到输出文件
    fwrite(fidOutput, thisText);
    % 检查当前文件末尾是否有换行,无则补写
    if ~isempty(thisText) && thisText(end) ~= sprintf('\n')
        fwrite(fidOutput, sprintf('\n'));
    end
    fclose(fidInput);
end
fclose(fidOutput);
补充说明
  • 代码中使用sprintf('\n')表示换行符,完全兼容Matlab 2015b版本
  • 补写换行前增加非空判断,避免遇到空CSV文件时触发索引越界错误
  • 修正后合并的文件所有行严格对齐,不会出现内容错位,可直接用于后续按列加载数据的步骤。

合并行粘连问题示例


内容的提问来源于stack exchange,提问作者Oiko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.17 16:16:01