欢迎光临散文网 会员登陆 & 注册

关于matlab无情地替我分析代码文件这件事

2022-12-20 16:11 作者:我要改2个名  | 我要投稿

什么时代了,我还在传统地逐字逐句读代码?

1.matlab替我提取注释,去掉左右的“=”号,‘%’号。

似乎残留了冗余的失败垃圾,我也没检查。

FileName='xx.txt';
fid=fopen(FileName,'rt');
A=textscan( fid, '%s', 'delimiter', '\n' );
A=A{1,1};
B=strings;
u=size(A,1);
C=[0];
for n=1:u
    Circu_volume=string(A(n,1));
    Circu_volume=strip(Circu_volume,'left',' ');
    Judgment_val1= startsWith(Circu_volume,'%');
    if Judgment_val1 == 1
        C=[C;n];
        Circu_volume=strip(Circu_volume,'left','%');
        Judgment_val2=startsWith(Circu_volume,'=');
        
        if Judgment_val2 == 1
            Circu_volume=strip(Circu_volume,'left','=');
            Circu_volume=strip(Circu_volume,'right','%');
            Circu_volume=strip(Circu_volume,'right','=');
        end
        B=[B;Circu_volume];
    end
end
% u=size(B,1);
% for n=1:u
%     Circu_volume=string(B(n,1));
%     if Circu_volume==""
% %         B(n,1)= [];
%         C(n,1)=[];
%     end
%     
% end
fid=fclose(fid);
%;n+1
C=string(C);
D=append(C,'  ',B);
FileName=insertBefore(FileName,'.txt','extra');
fid=fopen(FileName,'a');
fprintf(fid,'%s\n',D);
fid=fclose(fid);


原本我以为读某xx代码应该不难。只是套了个matlab的旧版GUI结构。

在我的理解里,程序的实用结构是:代码文件调用函数文件,函数文件应该自食其力。程序就需要2层结构就好了,需要多种调用就可以在代码文件里多分几节。直到我看到某xx的一个函数文件居然调用了另一个函数文件,我发现问题有点大。

2.迫不得已,开搞。我复制出所有源代码的txt格式,用matlab循环读取,查找已知的函数名。随手写了写命令,导出。

使用前要把txt文件,放进matlab的路径。

代码会导出部分非函数内容,但应对不长的代码问题不大。

代码与输出结果如下:

此代码,我命名为“Call_network.m”。意思是读取文件间的调用关系。

matlab很好,谢谢matlab。

2022-12-20 

FileName=["xx","gg"];
%读入文件名单

List=["rr","mm"];
%查询函数名单

E=size(FileName,1);
F=size(List,1);
Z=cell(0,4);
for n2=10:E%读入E个文件
   fid=fopen(FileName(n2),'rt');
   A=textscan( fid, '%s', 'delimiter', '\n' );
   A=A{1};
   C=size(A,1);
   G=cell(0,4);
for n1=1:C %读取文件的C行
    B=string(A(n1,1));
    for n3=1:F %按函数名单进行查询
     if contains(B,List(n3))
     D={FileName(n2),n1,List(n3),B};
     G=[G; D]; %保存结果
     end
    end
end
Z=[Z; G]; %保存结果
end

xlswrite('调用.xlsx',Z) %保存在matlab的默认目录里
fid=fclose(fid);


关于matlab无情地替我分析代码文件这件事的评论 (共 条)

分享到微博请遵守国家法律