【问题标题】:how to convert irregular cell to string or char vector in Matlab如何在 Matlab 中将不规则单元格转换为字符串或字符向量
【发布时间】:2019-09-10 10:29:57
【问题描述】:

假设我有一个不规则的单元格x

x={{11,23},11.2,{22,1,222.3}}

我想要一个函数 celltostr,其中celltostr(x) 返回一个字符串'{{11,23},11.2,{22,1,222.3}}' 或类似'11 23\n11.2\n22 1 222.3\n' 的东西。我尝试char([x{:}]) 并引发错误。我该怎么办?

【问题讨论】:

  • 也带括号?那么您将需要编写一个复杂的函数,因为括号和逗号实际上不在x 中,它们只是以人类可读的方式显示人类数据类型的一种方式。你为什么要这样做?也许对于您可能遇到的任何问题都有替代解决方案
  • 您想要一个字符向量还是一个字符串作为结果?标题表示字符串,但所需的输出表示字符向量。
  • 括号是可选的,不是必需的。函数返回 '11,23;11.2;22,1,222.3;'会好的。 '11,23\n11.2\n22,1,222.3\n' 也是可以接受的。我只想要一个包含所有原始单元格信息的字符串。 @AnderBiguri
  • 我对 Matlab 不熟悉,很抱歉模棱两可。我认为字符串和字符向量都可以。 @UnbearableLightness
  • 如果您想要任意级别的嵌套或自定义分隔符,This 可能会有所帮助

标签: matlab cell-array


【解决方案1】:

您可以编写一个小辅助函数并遍历元胞数组:

x={{11,23},11.2,{22,1,222.3}};
formattedCharVectors = cellfun(@checkCellContents,x,'un',0);
stringOutput = strjoin([formattedCharVectors{:}],'');

function charVector = checkCellContents(x)
    if iscell(x)
        charVector = compose(repmat('%.1f,',1,size(x,2)),[x{:}]);
        charVector{1}(end) = ';';
    else
        charVector = [num2str(x) ';'];
    end

end

stringOutput 是一个字符向量,其中包含您的评论所需的内容:

>> stringOutput

stringOutput =

'11.0,23.0;11.2;22.0,1.0,222.3;'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多