關(guān)于matlab無情地替我分析代碼文件這件事
什么時代了,我還在傳統(tǒng)地逐字逐句讀代碼?
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代碼應(yīng)該不難。只是套了個matlab的舊版GUI結(jié)構(gòu)。
在我的理解里,程序的實用結(jié)構(gòu)是:代碼文件調(diào)用函數(shù)文件,函數(shù)文件應(yīng)該自食其力。程序就需要2層結(jié)構(gòu)就好了,需要多種調(diào)用就可以在代碼文件里多分幾節(jié)。直到我看到某xx的一個函數(shù)文件居然調(diào)用了另一個函數(shù)文件,我發(fā)現(xiàn)問題有點大。
2.迫不得已,開搞。我復(fù)制出所有源代碼的txt格式,用matlab循環(huán)讀取,查找已知的函數(shù)名。隨手寫了寫命令,導(dǎo)出。
使用前要把txt文件,放進(jìn)matlab的路徑。
代碼會導(dǎo)出部分非函數(shù)內(nèi)容,但應(yīng)對不長的代碼問題不大。
代碼與輸出結(jié)果如下:
此代碼,我命名為“Call_network.m”。意思是讀取文件間的調(diào)用關(guān)系。
matlab很好,謝謝matlab。
2022-12-20?
FileName=["xx","gg"];
%讀入文件名單
List=["rr","mm"];
%查詢函數(shù)名單
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 %按函數(shù)名單進(jìn)行查詢
? ? if contains(B,List(n3))
? ? D={FileName(n2),n1,List(n3),B};
? ? G=[G; D]; %保存結(jié)果
? ? end
? ?end
end
Z=[Z; G]; %保存結(jié)果
end
xlswrite('調(diào)用.xlsx',Z) %保存在matlab的默認(rèn)目錄里
fid=fclose(fid);
標(biāo)簽: