分割细胞阵列

时间:2018-10-04 20:42:26

标签: matlab

我有一个150X1的细胞阵列。数组中有多种数据类型。第一个单元格包含0.9VA = 1.012207;第二个:0.9VA_CLK = 0.020752;像这样(大部分)。我想使用=作为分隔符将单元格分为两个单元格。因此,{1,1}:0.9VA和{1,2}:1.012207; {2,1}:0.9VA_CLK和{2,2}:0.020752;等等等等。我试过将它们转换为字符串,然后使用strsplit;但是,我遇到了问题,因为字符串数组的大小是可变的。

如果我可以提供其他信息,请告知我。感谢您的帮助和提前的时间。

enter image description here

1 个答案:

答案 0 :(得分:0)

您确实可以将strsplit应用于单元格数组中的每个字符串(字符数组)。为此,您可以使用cellfun

c{1} = '0.9VA = 1.012207';
c{2} = '0.9VA_CLK = 0.020752';
c{3} = 'CSIPhgenSWoffList = [0, 0, 0, 0]';
c{4} = 'SomethingElse = [0.020752, 0.24564]';
c = cellfun(@(x)strsplit(x,'='),c,'UniformOutput',false);
c = cat(1,c{:});

我在这里使用一个小的示例单元格数组c,其中包含四个字符串,我希望这是有代表性的。我使用strplitc应用于cellfun(x,'=')中的每个单元格,它以等号分割并返回一个包含单元格数组的单元格数组。也就是说,c中的每个字符串都变成了包含2个字符串的单元格数组(例如'0.9VA '' 1.012207'。这确实在字符串的开头和结尾留有一些空格。

下一行cat将单元格数组的此单元格数组转换为二维单元格数组。最终输出是一个单元格数组c,其中包含与原始单元格数组相同的行数,并具有2列。第一列对应于等号之前的部分,第二列对应于等号之后的部分。

要删除空格,可以再次使用strtrimcellfun

c = cellfun(@strtrim,c,'UniformOutput',false);