%======================================================================
% 处理当前目录下所有的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
txt_to_excel代码
最新推荐文章于 2024-07-08 22:30:46 发布