根据分隔符拆分字符串单元格数组

时间:2014-08-24 16:09:59

标签: matlab cell-array

我有一个像这样的字符串cellarray

12:34
13:45
12:45

现在我想将这个单元格数组拆分为两个,其中的值由分隔符分隔。像这样的东西

第一个

12
13
12

和第二个

34
45
45

我怎样才能在matlab中做到这一点?

2 个答案:

答案 0 :(得分:4)

输入字符串单元格数组 -

str_cellarr ={
    '12:34'
    '13:45'
    '12:45'}

转换为一个单元格数组,每个单元格都有一个1x2单元格的分割字符串 -

split1 = cellfun(@(x) strsplit(x,':'), str_cellarr(:),'uni',0)

或者根据@Luis建议使用更有效的解决方案 -

split1 = regexp(str_cellarr, ':', 'split')

在此之后,您可以采用两种方法。

方法#1

转换为2 element单元格数组,每个单元格包含由分隔符':'分隔的每个“字符串”字符串 -

split1_2cols = mat2cell(vertcat(split1{:}),size(str_cellarr,1),[1 1])

最后,将每个集合存储为单独的变量作为最终输出 -

[var1,var2] = deal(split1_2cols{:})

方法#2

使用split1数组中的每一列获取每个集合并将它们存储为单独的变量 -

var1 = arrayfun(@(n) split1{n}(1),1:size(str_cellarr,1))' %//'
var2 = arrayfun(@(n) split1{n}(2),1:size(str_cellarr,1))' %//'

如果您希望获得字母输出,请使用char(..)来获取这些输出。

答案 1 :(得分:3)

看来你正在处理时间问题。意味着hours:minutes

在这种情况下,最简单的方法是使用为此目的而制作的datevec函数。

str = { '12:34'
        '13:45'
        '12:45'};

[~, ~, ~, H, M] = datevec(str,'HH:MM')

返回:

H =
    12
    13
    12


M =
    34
    45
    45

如果你有minutes:seconds它同样有效:

[~, ~, ~, ~, M, S] = datevec(str,'MM:SS')

如果您还需要字符串,请将所有内容推送到num2str,例如:

MinutesAsString = num2str(M);