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
相关产品推荐
相关产品推荐

