如果 MATLAB Rb2020 中的行和列维度彼此不一致,如何取消嵌套具有嵌套数据和文本内容的元胞数组?

问题描述

我有一个(72x1 单元格),其内容由以下块/部分定义:

          COLUMN1
ROW1      Text Nr.1
ROW2      2345x3 double
ROW3      Text Nr.2

....乘以 24 次得到上述的 72x1 元胞数组

我现在的目标是以某种方式取消嵌套 2345x3 双倍内容,即获得以下数据顺序:

                     COLUMN1             COLUMN2        COLUMN3
                     Text Nr.1          (empty)         (empty)
                      value 1            value 1        value 1
                      value 2            value 2        value 2
                      value 3            value 3        value 3
                      value 4            value 4        value 4
                      value 5            value 5        value 5
                      value 6            value 6        value 6
                      value 7            value 7        value 7
                       etc.               etc.           etc.
                      Text Nr.2           (empty)       (empty)
                      Text Nr.1           (empty)       (empty)
                       value 1            value 1        value 1
                       value 2            value 2        value 2
                       value 3            value 3        value 3
                       value 4            value 4        value 4
                       value 5            value 5        value 5
                       value 6            value 6        value 6
                       value 7            value 7        value 7
                       etc.               etc.           etc.
                       Text Nr.2          (empty)        (empty)

我想为此使用 for 循环,以防行数发生变化。但是我不确定如何解决这个问题? (重塑,细胞乐趣?)

那为什么我想问你是否有一个代码

注意:我需要这个数据结构用于在 CAD 程序中生成几何结构的宏

解决方法

你可以这样使用:

x={'lorem';[1 2 3;4 5 6;7 8 9;2344*3+1 2344*3+2 2344*3+3];'ipsum'; ...
   'dolor';-[1 2 3;4 5 6;7 8 9;2344*3+1 2344*3+2 2344*3+3];'sit amet'};

m={};
for i=1:floor(numel(x)/3) %ignore trailing garbage (incomplete entry)
  k=x{3*(i-1)+2};
  m=[ m ; ...
      x(3*(i-1)+1) cell([1 size(k,2)-1]) ; ...
      mat2cell( k,ones([size(k,1) 1]),2) 1]) ) ; ...
      x(3*(i-1)+3) cell([1 size(k,2)-1]) ];
end

由于在您的用例中 for 循环仅执行 24 次迭代,我相信这种方法应该相当有效。