txt_to_excel代码

%======================================================================
% 处理当前目录下所有的txt
% 提取encoder,decoder,pcerror中的信息
% 颜色码率,总码率,YUV PSNR,编解码时间
%======================================================================
% 获取当前文件夹内所有的 txt 文件
files = dir('*.txt');
fileNames = {files.name};

% 初始化 Excel 数据表头
excelData = {'Name', 'Total Colors Bitstream Size', 'Total Bitstream Size', 'Color BPP', 'YPSNR', 'UPSNR', 'VPSNR', 'Encode Time', 'Decode Time'};

% 按照文件名前缀分组处理文件
uniquePrefixes = unique(regexprep(fileNames, '(_encoder|_pc_error|_decoder)\.txt$', ''));

% 循环处理每一组文件
for i = 1:length(uniquePrefixes)
    prefix = uniquePrefixes{i};
    
    % 构造 encoder、pc_error 和 decoder 文件名
    encoderFilename = strcat(prefix, '_encoder.txt');
    errorFilename = strcat(prefix, '_pc_error.txt');
    decoderFilename = strcat(prefix, '_decoder.txt');
    
    % 初始化变量
    totalColorsBitstreamSize = 0;
    totalBitstreamSize = 0;
    colorBPP = 0;
    encodeTime = NaN;
    decodeTime = NaN;
    YPSNR = NaN;
    UPSNR = NaN;
    VPSNR = NaN;
    
% 读取 encoder 文件并提取数据
if isfile(encoderFilename)
    encoderFileContent = fileread(encoderFilename);
    encoderLines = splitlines(encoderFileContent);
    for line = encoderLines'
        if contains(line, 'colors bitstream size')
            % 提取总颜色比特流大小
            totalSizeTokens = regexp(line, 'colors bitstream size (\d+)', 'tokens');
            if ~isempty(totalSizeTokens)
                totalColorsBitstreamSize = totalColorsBitstreamSize + str2double(totalSizeTokens{1}{1});
            end
            % 提取颜色 BPP
            bppTokens = regexp(line, 'colors bitstream size \d+ B \(([\d\.]+) bpp\)', 'tokens');
            if ~isempty(bppTokens) && ~isempty(bppTokens{1})
                colorBPP = colorBPP + str2double(bppTokens{1}{1});
            end
        elseif contains(line, 'Total bitstream size')
            tokens = regexp(line, 'Total bitstream size (\d+)', 'tokens');
            if ~isempty(tokens)
                totalBitstreamSize = str2double(tokens{1}{1});
            end
        end
    end
    encodeTime = extractLastProcessingTime(encoderLines);
end

    % 读取 pc_error 文件并提取数据
    if isfile(errorFilename)
        errorFileContent = fileread(errorFilename);
        errorLines = splitlines(errorFileContent);
        for line = errorLines'
            if contains(line, 'c[0],PSNRF') && ~contains(line, 'h.c[0],PSNRF')
                tokens = regexp(line, 'c\[0\],PSNRF\s*:\s*(\d+\.\d+)', 'tokens');
                if ~isempty(tokens)
                    YPSNR = str2double(tokens{1}{1});
                end
            elseif contains(line, 'c[1],PSNRF') && ~contains(line, 'h.c[1],PSNRF')
                tokens = regexp(line, 'c\[1\],PSNRF\s*:\s*(\d+\.\d+)', 'tokens');
                if ~isempty(tokens)
                    UPSNR = str2double(tokens{1}{1});
                end
            elseif contains(line, 'c[2],PSNRF') && ~contains(line, 'h.c[2],PSNRF')
                tokens = regexp(line, 'c\[2\],PSNRF\s*:\s*(\d+\.\d+)', 'tokens');
                if ~isempty(tokens)
                    VPSNR = str2double(tokens{1}{1});
                end
            end
        end
    end

     % 读取 decoder 文件并提取数据
    if isfile(decoderFilename)
        decoderFileContent = fileread(decoderFilename);
        decoderLines = splitlines(decoderFileContent);
        decodeTime = extractLastProcessingTime(decoderLines);
    end
    
    % 将结果添加到 Excel 数据中
    excelData(end+1, :) = {prefix, totalColorsBitstreamSize, totalBitstreamSize, colorBPP, YPSNR, UPSNR, VPSNR, encodeTime, decodeTime};
end

% 写入 Excel 文件
xlswrite('output_data.xlsx', excelData);

% 函数: 提取最后一个 Processing time (user)
function procTime = extractLastProcessingTime(lines)
    procTime = NaN;
    for i = length(lines):-1:1
        line = lines{i};
        if contains(line, 'Processing time (user)')
            tokens = regexp(line, 'Processing time \(user\): ([\d\.]+) s', 'tokens');
            if ~isempty(tokens) && ~isempty(tokens{1})
                procTime = str2double(tokens{1}{1});
                break;
            end
        end
    end
end
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值