是否有Matlab函数将任何数据结构转换为字符串?

时间:2012-10-09 10:22:15

标签: matlab

我在Matlab中寻找一个用于错误消息的函数,如下所示:

error(['Invalid value for someVariable: ' wantedFunction(someVariable)]);

我希望wantedFunction能够同时接受字符串,数组,单元格数组,理想情况下甚至是结构数组。

目前,我正在使用num2str,但这对单元格不起作用。我认为我想要的可以用sprintf完成,但我还没弄明白怎么做。我想我可以编写自己的函数,但如果已经有一种方法可以在Matlab中执行此操作,那将是多余的。有什么想法吗?

4 个答案:

答案 0 :(得分:14)

是的,虽然不是那么简单。您必须将dispevalc结合使用:

string = evalc(['disp(someVariable)'])

您可以将其转换为更易于管理的形式:

toString = @(var) evalc(['disp(var)']);

所以,举个例子:

>> var = {rand(3,1), 'A', struct('test', 5)};
>> error(['Invalid value for var: ' toString(var)])

??? Invalid value for var:     [3x1 double]    'A'    [1x1 struct]

答案 1 :(得分:2)

不,没有这样的功能。我遇到了类似的问题,所以这是我使用的一个非常基本的功能。要意识到它并不完整。例如,它不会以有意义的方式输出结构的字段,但可以轻松添加。您可以将其视为基本实现,并使其符合您的需求。

function ret = all2str(param)
if isempty(param)
    if iscell(param)
        ret = '(empty cell)';
    elseif isstruct(param);
        ret = '(empty struct)';
    else
        ret = '(empty)';
    end
    return;
end

if ischar(param)
    ret = param;
    return;
end

if isnumeric(param)
    ret = num2str(param);
    return;
end

if iscell(param)
    ret = all2str(param{1});
    for i=2:numel(param)
        ret = [ret ', ' all2str(param{i})];
    end
    return;
end

if isstruct(param)
    ret = '(structure)';
    return;
end
end

答案 2 :(得分:2)

想到这一点,我记得很久以前做过的事情与angainor在答案中所做的非常相似。我会在这里发布给任何有兴趣将任意事物转换为字符串的人,并且通常可以更好地控制转换的完成方式。

它支持空,逻辑,字符,函数句柄,数字,单元格,结构(数组)和用户定义的类(下一次更新中的稀疏数组)。

编辑:我已将此作为我最终放在file exchange上的更新的模板。随意尝试并修改以满足您的需求。

答案 3 :(得分:2)

看起来很奇怪,但是

str = matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(value)

为您完成工作,而不是使用那种不明智的evalc(disp())方法。