2011-01-13 67 views
6

我有涉及許多M文件和MDL-文件複雜的MATLAB,Simulink的項目未使用的變量和函數。一些M文件定義在一個m文件中使用的變量(糟糕的設計,我知道,但它是舊的代碼)。還有一些功能不再使用。查找在MATLAB,Simulink的項目

我需要一個自動的方式來查找未使用的變量和函數,這樣我可以刪除它們,使整個事情有點不太複雜。理想情況下,我應該有一個腳本/工具,作爲輸入項目的根目錄的名稱,在掃描子目錄下的所有文件,並輸出不受任何m文件或MDL文件中使用的所有變量和函數。

我知道,我能找到未在MDL-文件(見Tips and Tricks - Tracking Variables in a Simulink Model)使用的變量。我想將該方法應用於項目中的所有文件。

我的想法是檢測m文件中未使用的變量是將所有m文件臨時合併到一個文件中,並在其上運行mlint。任何更好的想法?

回答

7

而不是通過粘貼所有M文件到一個運行MLINT的繁瑣(可能出錯)的任務去的,你有一些其他選項...

如果你把所有的一個文件夾中的文件,最簡單的方法是去到當前文件夾瀏覽器,點擊操作按鈕alt text,然後選擇報告>代碼分析器報告

alt text

這將打開一個新窗口中顯示MLINT結果每個m文件在當前目錄:

alt text

,如果您使用腳本而自動執行的過程,而不是必須單擊菜單選項,MathWorks文件交換器上會有幾個提交(herehere),這些提交似乎在目錄結構上遞歸地工作,而不是僅在單個目錄中工作。

在額外的,下面是一些示例代碼,將你想要做什麼的一個目錄:

dirData = dir;     %# Get data on the current directory contents 
fileIndex = ~[dirData.isdir];     %# Get an index for the files 
fileNames = {dirData(fileIndex).name};  %# Get the file names 
[~,~,ext] = cellfun(@fileparts,fileNames,... %# Get the file extensions 
        'UniformOutput',false); 
mFileIndex = strcmp(ext,'.m');    %# Get an index for the m-files 
cellfun(@mlint,fileNames(mFileIndex));  %# Run MLINT on each m-file 

你可以用這種方式擴展文件名(和路徑)的集合operate recursively on a directory tree,然後運行MLINT在您收集的結果文件集上。

+1

謝謝,但這隻涵蓋了部分問題。假設我有兩個文件f1.m和f2.m. f1.m如下:a = 5; B = 3; f2如下:c = a * 2; b沒有使用,但是代碼分析器報告沒有說明這一點。 – Samil 2011-01-24 13:59:36