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!');

 

posted @ 2022-04-12 19:05  MUJIU  阅读(233)  评论(0编辑  收藏  举报