MatLab - 根据名称执行功能

时间:2012-10-05 18:38:20

标签: file matlab

我有几个MatLab功能,几乎所有功能都有测试功能。目前对于测试函数没有真正的命名约定,因此我最终得到了test_functionNametests_functionNameFunctionName_Test等函数。

然后,我看到这些功能有两个共同点:

  • 该名称包含“test”(使用不同的大小写)。
  • 他们没有输入或输出参数。

我想编写一个函数,在给定文件夹(或PATH)下找到所有尊重这两个条件并执行它们的函数。这样我就可以在一次调用中执行所有测试功能。

我有什么方法可以做到吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);

然后再过滤(我想你已经有了想法)