2

私はMatLab関数をいくつか持っていますが、それらのほとんどすべてにテスト関数があります。現在、テスト関数の命名規則は実際にはないため、、、、などtest_functionNameの関数になります。tests_functionNameFunctionName_Test

ただし、これらの関数に共通する2つのことがわかります。

  • 名前には「test」が含まれています(大文字と小文字が異なります)。
  • 入力パラメータまたは出力パラメータはありません。

特定のフォルダー(またはPATH)の下で、これら2つの条件を尊重し、それらを実行するすべての関数を検索する関数を作成したいと思います。このようにして、1回の呼び出しですべてのテスト関数を実行できました。

それができる方法はありますか?

4

2 に答える 2

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
于 2012-10-05T18:49:12.457 に答える
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);

そして、もう一度フィルタリングします(私はあなたがすでにアイデアを持っていると思います)

于 2012-10-05T18:49:04.873 に答える