MATLAB:如何拆分不同定界符编号的单元格数组



假设有一个输入单元格:

input=

"82.3 4.3 John"

"4.2 0.0001 Tim Taylor"

这是一个2By1单元格数组。我需要将其拆分以获得一个2by3阵列,例如:

"82.3" "4.3" "John"

"4.2" "0.0001" "Tim Taylor"

split(input)split(input,'t')返回错误,因为每个单元组都包含不同数量的分隔符。

您可以使用 split,但是它会有所不同,具体取决于您是否包含字符矢量的单元格数组或包含字符串的单元格数组(我知道,这很令人困惑):

如果您的input如下显示:

input =
  2×1 cell array
    '82.3   4.3 John'
    '4.2    0.0001  Tim Taylor'

然后您有一个字符向量的单元格数组,您可以在类似的选项卡上拆分:

str = split(input, char(9))
str = 
  2×3 string array
    "82.3"    "4.3"       "John"      
    "4.2"     "0.0001"    "Tim Taylor"


如果您的 input是这样显示的:

input =
  2×1 cell array
    ["82.3  4.3 John"      ]
    ["4.2   0.0001  Tim Taylor"]

然后,您有一个单元的单元阵列,然后需要将细胞串成2 x-1的字符串,然后在选项卡上分裂:

str = split([input{:}].', char(9))
str = 
  2×3 string array
    "82.3"    "4.3"       "John"      
    "4.2"     "0.0001"    "Tim Taylor"


请注意,我必须使用char(9)指定ASCII选项卡字符,并且在每种情况下的输出是2 x-3个字符串。

这是多种方法

%Never remembered how to correctly insert whitespace characters
inp = {['82.3' char(9) '4.3' char(9) 'John'];['4.2' char(9) '0.0001' char(9) 'Tim Taylor']}
  1. @ander biguri所建议的,用strsplit

    out=cellfun(@(x) strsplit(x,'t'), inp,'un',0); out=cat(1,out{:})
    
  2. 具有某些文件iMport函数,即带有textscan

    %with on-the-fly type conversion
    out = cellfun(@(x) textscan(x,'%f%f%s','delimiter','t'), inp, 'un', 0); out = cat(1,out{:})
    %keeping all values as strings
    out = cellfun(@(x) textscan(x,'%s%s%s','delimiter','t'), inp, 'un', 0); out = cat(1,out{:})
    

这并不漂亮,但是可以完成工作:

clear output % make sure not exist
for i = 1:size(input,1)
    output(i,:) = cellstr(regexp(input{i}, 't', 'split'));
end

最新更新