问题描述
存在这样的数据项目
1 代号 :0000 V 1 0/01:08:09 - 0/01:09:10 1 1 789
2 代号 :0000 V 1 0/01:09:09 - 0/01:09:19 1 354 73459
3 代号 :0000 V 1 0/01:08:09 - 0/01:10:10 1 453 789
4 代号 :0000 V 1 0/01:08:09 - 0/01:19:10 1 234 74353
…
需要针对某个特定的代号,筛选数据,要求:
(1)统计代号出现的次数
(2)计算代号所在数据组的时间差,以0/01:08:09 - 0/01:10:10 为准,格式按照dd/HH:MM:SS标注
(3)统计出现该代号的平均时间差和总时间差
(4)文档中可能存在乱码数据,能够甄别处理
解决方案代码
close all
clear all
clc
%% 循环读取文件夹中的txt文件
temp = dir(['*.txt']);
% temp = dir(['D:\文件夹\','*.txt']); 输入文件夹地址,然后逗号之后拼接上文件名称(注意文件最后要有一个"\”)
N = length(temp); %文件夹内文件的个数
result = zeros(N,3);
for i = 1:N
filename = temp(i).name;
fid = fopen(filename); % 首先打开文本文件
n = 0; % 计算出现的次数
T= []; % 计算的时间
while ~feof(fid) % while循环表示文件指针没到达末尾,则继续
% 每次读取一行, str是字符串格式
str = fgetl(fid);
% 以 ' ' 作为分割数据的字符,结果为cell数组
s = regexp(str, ' ', 'split');
if length(s)>5
if strcmp(s{2},'3C274')
n = n+1;
s(cellfun(@isempty,s))=[]; % 删除cell中的空白格
for k = 2:length(s)
if strcmp(s{k},'1')
t1 = s{k+1};
t2 = s{k+3};
break
end
end
if t1(1)=='0' && t2(1)=='0'
t1(1)=='2';
t2(1)=='2';
end
T1 = datevec(strcat('2022/11/',t1),'yyyy/mm/dd/HH:MM:SS');
T2 = datevec(strcat('2022/11/',t2),'yyyy/mm/dd/HH:MM:SS');
dT = etime(T2,T1);
T = [T dT];
end
end
end
result(i,:)= [n mean(T)/60 sum(T)/60];
fclose(fid);
end
temp.name
result
分别按照顺序输出了读取的txt文件名字,统计数据用result保存,每行分别表示特定代号出现的次数、平均时间差和总时间差,temp.name表示文件名