关于matlab无情地替我分析代码文件这件事
什么时代了,我还在传统地逐字逐句读代码?
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);