You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Matlab中读取并合并含指定字符串的多日志文件

在MATLAB中合并含特定字符串的日志文件

我来帮你完善这个脚本,实现批量合并文件夹中名称包含PILOT.log文件的需求,下面是完整的实现方案和优化说明:

核心步骤梳理

  • 筛选出所有符合命名规则的目标日志文件
  • 逐个读取每个文件的内容
  • 将所有内容整合写入一个新的合并日志文件

完整可运行代码

% 1. 筛选当前文件夹中名称包含"PILOT"的.log文件
pilotFiles = dir('*PILOT*.log');

% 先检查是否找到目标文件,避免后续报错
if isempty(pilotFiles)
    error('未找到任何包含PILOT的.log文件,请检查文件名或路径');
end

% 2. 定义合并后的日志文件名,也可以自定义命名
mergedLogName = 'merged_PILOT_logs.log';
% 打开合并文件:'w'表示覆盖原有内容,若要追加到已有文件可改为'a'
mergedFileID = fopen(mergedLogName, 'w');

% 3. 遍历每个目标文件并合并内容
for filIdx = 1:length(pilotFiles)
    % 获取当前文件名,直接访问name属性避免原代码char转换补空格的问题
    currentFileName = pilotFiles(filIdx).name;
    
    % 尝试打开当前日志文件
    currentFileID = fopen(currentFileName, 'r');
    if currentFileID == -1
        warning('无法打开文件:%s,将跳过该文件', currentFileName);
        continue;
    end
    
    % 读取当前文件的全部内容(适用于文本格式日志)
    fileContent = fread(currentFileID, '*char');
    % 将内容写入合并文件
    fwrite(mergedFileID, fileContent);
    % 可选:在不同源文件之间添加分隔线,方便后续区分内容来源
    fwrite(mergedFileID, sprintf('\n===================== 来自文件:%s =====================\n', currentFileName));
    
    % 关闭当前文件,释放资源
    fclose(currentFileID);
end

% 关闭合并文件
fclose(mergedFileID);

disp(['合并完成!已生成合并日志:', mergedLogName]);

代码优化说明

  • 规避了原代码中char(files)的坑:当文件名长度不一致时,char会自动补空格,导致读取文件名出错,直接用pilotFiles(filIdx).name更可靠
  • 增加了错误处理:提前检查是否找到目标文件,处理无法打开的异常文件
  • 灵活的写入模式:需要追加内容时只需修改fopen的模式参数
  • 可选分隔线:方便后续快速区分不同源文件的内容边界

针对你原有代码的补充(如果日志是结构化表格)

如果你原代码中noofColumns = ...是要处理固定列数的表格日志,可以用下面的方式确保格式一致后再合并:

% 假设预期列数为5,可根据实际情况修改
expectedColumns = 5;

% 在遍历循环中替换读取逻辑
currentData = dlmread(currentFileName);
if size(currentData, 2) == expectedColumns
    dlmwrite(mergedLogName, currentData, '-append');
else
    warning('文件%s的列数不符合要求,跳过该文件', currentFileName);
end

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

火山引擎 最新活动