2012-10-05 63 views
2

我有幾個MatLab功能,並且幾乎所有功能都有測試功能。是不是真的有一個命名約定,現在測試功能,所以我最終FunctionName_Testtest_functionName功能,tests_functionName,等MatLab - 基於他們的名字執行功能

Howerver,我看到兩件事情,這些功能的共同點:

  • 該名稱包含「測試」(具有不同的外殼)。
  • 它們沒有輸入或輸出參數。

我想寫一個函數,可以在給定的文件夾(或路徑)下找到所有尊重這兩個條件並執行它們的函數。這樣我就可以在一次調用中執行我所有的測試功能。

有什麼辦法可以做到嗎?

回答

3

你可以做如下:

fun=dir('*test*.m'); %% look for matlab scripts which name contains 'test' 
fun={fun.name};  %% extract their names 
fun=fun(cellfun(@(x) (nargin(x)==0),fun)); %% select the ones with no input arguments 
fun = regexprep(fun, '.m', ''); % remove '.m' from the filenames 
cellfun(@eval,fun); %% execute them 
+0

+1好答案!但它也會給你FooTestBar.m。不知道OP是否需要它 –

+0

@Andrey,你是對的...... – Oli

+0

必須有一個正則表達式,只在最後或開始時給出'test'。像「test * | * test」。我的正則表達式技能是生鏽的:) –

1

首先,讓你的文件夾下的所有文件:

d = dir(myFolder); 

刪除那些延伸不.m

indexes = strcmp('.m',{d.ext}); 
    d(indexes) = []; 

然後,把他們所有的名字:

fileNames = {d.Name}; 

檢查哪一個開始或結束測試:

testPrefix = strncmp('test',fileNames) 
    testPostfix = %# Left as an exercise to the reader 
    sutiableFileNames = fileNames(testPrefix | testPostfix); 

現在你可以使用`nargin'檢查的參數量:

numOfInParams = cellfun(@nargin,sutiableFileNames); 
    numOfOutParams = cellfun(@nargout,sutiableFileNames); 

然後再過濾器(我想你已經得到了主意)