以编程方式返回所有功能的列表

时间:2018-08-21 05:59:46

标签: matlab function namespaces package metadata

我想以编程方式获取当前MATLAB名称空间中可用功能的列表以及包中的可用功能。该怎么办?

enter image description here

2 个答案:

答案 0 :(得分:9)

为此,我们可以使用package metadata

pkgs = meta.package.getAllPackages();
% Or if the specific package name is known:
mp = meta.package.fromName('matlab')

在第1个 st 情况下返回的单元格数组pkgs包含如下对象:

  package with properties:

                   Name: 'Sldv'
            Description: ''
    DetailedDescription: ''
              ClassList: [29×1 meta.class]
           FunctionList: [8×1 meta.method]
            PackageList: [9×1 meta.package]
      ContainingPackage: [0×0 meta.package]

因此,剩下要做的就是遍历软件包和子软件包并收集其FunctionList条目。

除了通过解析function list doc page,例如使用Python APIBeautifulSoup之外,我不确定如何获取属于“默认”名称空间的函数: / p>

fl = arrayfun(@(x)string(x{1}.string.char), py.bs4.BeautifulSoup( ...
       fileread(fullfile(docroot,'matlab','functionlist-alpha.html')), ...
       'html.parser').find_all("code")).';

答案 1 :(得分:7)

进一步Dev-iL's answer解析function list documentation web page非常容易,因为Web开发人员(当前)已经使用了有用的“函数”类来标记每个函数名称! HTML中的每个函数如下所示:

<code class="function">accumarray</code>

因此我们可以使用urlread来获取源代码,并使用正则表达式去除每个"function"类项目的内部文本:

str = urlread('https://mathworks.com/help/matlab/functionlist-alpha.html');
funcs = regexp( str, '(?<="function">)[0-9A-Za-z.]+', 'match' );

注意:URL中的“字母”是“字母”,而不是表示早期测试!

funcs是具有该页面上所有函数名称的单元格数组。

上面使用的页面适用于最新的MATLAB版本。对于特定版本,请使用结构如下的历史文档页面:

https://mathworks.com/help/releases/R2017b/matlab/functionlist.html