DIY(01)——实现多个文字文件在Matlab里面的读取和计算汇总
背景
当采用自主程序进行实验实测的时候,通常是以下流程:
参与者点开程序→程序运行→参与者结束程序→程序独立输出施测结果。
这样就会面临多个文件汇总的问题。
尤其当文件中存在汉字的时候,就需要多一步的编码转换和数据提取。
思路
要明确思路就需要明确需要实现的目标,我的目标就是
1.将每一个文件进行读取计算
2.将每个文件的结果汇总到一个表格
那么接近这两个目标的答题方式为
1.读取文件,提取数据,根据分类条件计算对应结果
2.应用循环
实际问题
真正开始实施的时候,遇到的问题有
1.中文的读取和作为分类条件进行文本识别
2.寻找到需要统计数据的规律以应用到所有文件中
代码(无效数据路径):
clear all; clc; fileFolder=fullfile('F:\results'); dirOutput=dir(fullfile(fileFolder)); fileNames={dirOutput.name}; [~,AN]=size(fileNames); res=[]; feature('DefaultCharacterSet', 'UTF8'); Data=importdata([fileFolder,'\',fileNames{1,3}]); var=native2unicode(Data.textdata{2,1}(11:12)); for i = 3:AN t={}; feature('DefaultCharacterSet', 'UTF8'); Data1=importdata([fileFolder,'\',fileNames{1,i}]); [qq,pp]=size(Data1.textdata); % game time char=Data1.colheaders{1,1}; if length(char) ==17 charHOU=str2double(char(7)); charMIN=str2double(char(10:12)); charSEC=str2double(char(14:16)); totaltime=charHOU*60*60+charMIN*60+charSEC; else if length(char) == 15 charHOU=str2double(char(7)); charMIN=str2double(char(11)); charSEC=str2double(char(14)); totaltime=charHOU*60*60+charMIN*60+charSEC; else if str2double(char(7))== 1 && isnan(str2double(char(11:12)))==0 %1H 30MIN 20SEC charHOU=str2double(char(7)); charMIN=str2double(char(11:12)); charSEC=str2double(char(14:15)); totaltime=charHOU*60*60+charMIN*60+charSEC; else charHOU=str2double(char(7)); charMIN=str2double(char(11)); charSEC=str2double(char(14:15)); totaltime=charHOU*60*60+charMIN*60+charSEC; end end end % turn outcome and timeinter 0=false 1=success 2=nearmiss if length(char) <= 17 for j = 1:qq-1 if j < 10 temp = Data1.textdata{j,1}; if isnan(str2double(temp(3)))==0 turn = str2double(temp(3)); outcome = temp(11:12); item1 =str2double(Data1.textdata{j,2}(length(Data1.textdata{j,2}))); if strfind(temp,'Ne') == 11 timeinter =str2double(temp(27:31)); index = 2; else timeinter =str2double(temp(20:24)); if ~isempty(strfind(outcome,var)) index = strfind(outcome,var); else index = 0; end end else turn = str2double(temp(4)); outcome = temp(12:13); item1 =str2double(Data1.textdata{j,2}(length(Data1.textdata{j,2}))); if strfind(temp,'Ne') == 12 timeinter =str2double(temp(28:32)); index = 2; else timeinter =str2double(temp(21:25)); if ~isempty(strfind(outcome,var)) index = strfind(outcome,var); else index = 0; end end end else if j > 99 temp = Data1.textdata{j,1}; turn = str2double(temp(3:5)); outcome = temp(13:14); item1 =str2double(Data1.textdata{j,2}(length(Data1.textdata{j,2}))); if strfind(temp,'Ne') == 13 timeinter =str2double(temp(29:34)); index = 2; else timeinter =str2double(temp(22:27)); if ~isempty(strfind(outcome,var)) index = strfind(outcome,var); else index = 0; end end else temp = Data1.textdata{j,1}; turn = str2double(temp(3:4)); outcome = temp(12:13); item1 =str2double(Data1.textdata{j,2}(length(Data1.textdata{j,2}))); if strfind(temp,'Ne') == 12 timeinter =str2double(temp(28:32)); index = 2; else timeinter =str2double(temp(21:25)); if ~isempty(strfind(outcome,var)) index = strfind(outcome,var); else index = 0; end end end end t{j,1}=turn; t{j,2}=outcome; t{j,3}=timeinter; t{j,4}=index; t{j,5}=item1; t{j,6}=Data1.data(j,1); t{j,7}=Data1.data(j,2); end aver=t; aver(:,2)=[]; aver=cell2mat(aver); f=0; win =0; nm =0; item_f_1=0; item_f_2=0; item_f_3=0; item_w_1=0; item_w_2=0; item_w_3=0; item_n_1=0; item_n_2=0; item_n_3=0; [q,p]=size(aver); for m =1:q if aver(m,3)==0; f=f+aver(m,2); item_f_1=item_f_1+aver(m,4); item_f_2=item_f_2+aver(m,5); item_f_3=item_f_3+aver(m,6); else if aver(m,3)==1; win=win+aver(m,2); item_w_1=item_w_1+aver(m,4); item_w_2=item_w_2+aver(m,5); item_w_3=item_w_3+aver(m,6); else nm = nm+aver(m,2); item_n_1=item_n_1+aver(m,4); item_n_2=item_n_2+aver(m,5); item_n_3=item_n_3+aver(m,6); end end end if sum(aver(:,3)==0)~=0 fal_aver = f/sum(aver(:,3)==0); item_f_1a=item_f_1/sum(aver(:,3)==0); item_f_2a=item_f_2/sum(aver(:,3)==0); item_f_3a=item_f_3/sum(aver(:,3)==0); else fal_aver = 0; item_f_1a = 0; item_f_2a = 0; item_f_3a = 0; end if sum(aver(:,3)==1)~=0 win_aver = win/sum(aver(:,3)==1); item_w_1a=item_w_1/sum(aver(:,3)==1); item_w_2a=item_w_2/sum(aver(:,3)==1); item_w_3a=item_w_3/sum(aver(:,3)==1); else win_aver = 0; item_w_1a = 0; item_w_2a = 0; item_w_3a = 0; end if sum(aver(:,3)==2)~=0 nm_aver = nm/sum(aver(:,3)==2); item_n_1a=item_n_1/sum(aver(:,3)==2); item_n_2a=item_n_2/sum(aver(:,3)==2); item_n_3a=item_n_3/sum(aver(:,3)==2); else nm_aver = 0; item_n_1a = 0; item_n_2a = 0; item_n_3a = 0; end else for j = 1:qq if j < 10 temp = Data1.textdata{j,1}; turn = str2double(temp(3)); outcome = temp(11:12); item1 =str2double(Data1.textdata{j,2}(length(Data1.textdata{j,2}))); if strfind(temp,'Ne') == 11 timeinter =str2double(temp(27:31)); index = 2; else timeinter =str2double(temp(20:24)); if ~isempty(strfind(outcome,var)) index = strfind(outcome,var); else index = 0; end end else temp = Data1.textdata{j,1}; turn = str2double(temp(3:4)); outcome = temp(12:13); item1 =str2double(Data1.textdata{j,2}(length(Data1.textdata{j,2}))); if strfind(temp,'Ne') == 12 timeinter =str2double(temp(28:32)); index = 2; else timeinter =str2double(temp(21:25)); if ~isempty(strfind(outcome,var)) index = strfind(outcome,var); else index = 0; end end end t{j,1}=turn; t{j,2}=outcome; t{j,3}=timeinter; t{j,4}=index; t{j,5}=item1; t{j,6}=Data1.data(j,1); t{j,7}=Data1.data(j,2); end aver=t; aver(:,2)=[]; aver=cell2mat(aver); f=0; win =0; nm =0; item_f_1=0; item_f_2=0; item_f_3=0; item_w_1=0; item_w_2=0; item_w_3=0; item_n_1=0; item_n_2=0; item_n_3=0; [q,p]=size(aver); for m =1:q if aver(m,3)==0; f=f+aver(m,2); item_f_1=item_f_1+aver(m,4); item_f_2=item_f_2+aver(m,5); item_f_3=item_f_3+aver(m,6); else if aver(m,3)==1; win=win+aver(m,2); item_w_1=item_w_1+aver(m,4); item_w_2=item_w_2+aver(m,5); item_w_3=item_w_3+aver(m,6); else nm = nm+aver(m,2); item_n_1=item_n_1+aver(m,4); item_n_2=item_n_2+aver(m,5); item_n_3=item_n_3+aver(m,6); end end end if sum(aver(:,3)==0)~=0 fal_aver = f/sum(aver(:,3)==0); item_f_1a=item_f_1/sum(aver(:,3)==0); item_f_2a=item_f_2/sum(aver(:,3)==0); item_f_3a=item_f_3/sum(aver(:,3)==0); else fal_aver = 0; item_f_1a = 0; item_f_2a = 0; item_f_3a = 0; end if sum(aver(:,3)==1)~=0 win_aver = win/sum(aver(:,3)==1); item_w_1a=item_w_1/sum(aver(:,3)==1); item_w_2a=item_w_2/sum(aver(:,3)==1); item_w_3a=item_w_3/sum(aver(:,3)==1); else win_aver = 0; item_w_1a = 0; item_w_2a = 0; item_w_3a = 0; end if sum(aver(:,3)==2)~=0 nm_aver = nm/sum(aver(:,3)==2); item_n_1a=item_n_1/sum(aver(:,3)==2); item_n_2a=item_n_2/sum(aver(:,3)==2); item_n_3a=item_n_3/sum(aver(:,3)==2); else nm_aver = 0; item_n_1a = 0; item_n_2a = 0; item_n_3a = 0; end end res(i-2,1) = str2double(fileNames{1,i}(length(fileNames{1,i})-3:length(fileNames{1,i}))); res(i-2,2)=aver(q,1); res(i-2,3)=totaltime; res(i-2,4)= fal_aver; res(i-2,5)= sum(aver(:,3)==0); res(i-2,6)=item_f_1a; res(i-2,7)=item_f_2a; res(i-2,8)=item_f_3a; res(i-2,9)=win_aver; res(i-2,10)=sum(aver(:,3)==1); res(i-2,11)=item_w_1a; res(i-2,12)=item_w_2a; res(i-2,13)=item_w_3a; res(i-2,14)=nm_aver; res(i-2,15)=sum(aver(:,3)==2); res(i-2,16)=item_n_1a; res(i-2,17)=item_n_2a; res(i-2,18)=item_n_3a; end Result=array2table(res,'VariableNames',{'ID','Turn','Ttime','F_inter','F_num','F_item1','F_item2','F_item3','W_inter','W_num','W_item1','W_item2','W_item3','N_inter','N_num','N_item1','N_item2','N_item3'}); writetable(Result,'F:\results7.xlsx'); msgbox('DONE!');
分类:
Matlab
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)