在matlab中消除单元格中的字符

时间:2015-08-18 11:56:48

标签: matlab date cell-array

我有一个2015年所有日期的载体,即:

'01.01.2015'
'02.01.2015'
.
.
.
'31.12.2015'

如何消除列表中的日子?所以结果是这样的列表:

'01.2015'
'01.2015'
.
.
.
'12.2015'
'12.2015'

非常感谢你!此外,如果我知道,如何消除从一个日期开始的日子,这将是一个很大的帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

由于所有字符串格式相同,您可以选择从每个字符串中的第4个字符开始直到最后一个字符的字符:

DatesCell = {'01.01.2015';'02.01.2015';'21.12.2015'}

NewDates = cellfun(@(x) x(4:end),DatesCell,'uni',0)

此代码使用cellfun,这只是伪装的for循环。

以下是等效的:

DatesCell = {'01.01.2015';'02.01.2015';'21.12.2015'}

NewDatesLoop = cell(numel(DatesCell),1);
for k =1:numel(DatesCell)

    NewDatesLoop{k} = DatesCell{k}(4:end);

end

输出:

NewDates = 

    '01.2015'
    '01.2015'
    '12.2015'


NewDatesLoop = 

    '01.2015'
    '01.2015'
    '12.2015'

答案 1 :(得分:1)

如果您的日期始终采用相同的格式,您可以通过简单的site电话来完成:

testdates = {'01.01.2015';'02.01.2015';'03.01.2015';'04.01.2015'};

myrange = [1:2 6:10];
newdates = cellfun(@(x) x(myrange), testdates, 'UniformOutput', false);

返回:

newdates = 

    '01.2015'
    '02.2015'
    '03.2015'
    '04.2015'

cellfun将一些函数应用于单元格数组中的每个单元格。我在这里使用的是使用应用于每个单元格的myrange索引创建一个新数组。请注意,这不是一种强大的方法,只要日期格式发生变化就会中断。

对于更强大的方法,您可以考虑使用cellfundatenum

testdates = {'01.01.2015';'02.01.2015';'03.01.2015';'04.01.2015'};

serialdates = datenum(testdates, 'mm.dd.yyyy');
newdates = datestr(serialdates, 'mm.yyyy');

返回:

newdates =

01.2015
02.2015
03.2015
04.2015

如果您的日期格式发生变化(或在整个数组中变化),这也会中断,但行为比cellfun调用更明确。