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

How to unnest a cell array with nested data and text content if the row and column dimensions do not agree with each other in MATLAB Rb2020?

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

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

...乘以 24 得到提到的 72x1 元胞数组

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

                     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 循环,以防行数发生变化。但是我什至不确定如何解决这个问题? (reshape, cellfun?)

这就是为什么我想问你是否有一个代码?

注意:我需要这个数据结构用于在 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]), ones([size(k,2) 1]) ) ; ...
      x(3*(i-1)+3) cell([1 size(k,2)-1]) ];
end

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