从matlab中的单元格中删除字符

eliminate chars from cell in matlab

我有一个包含 2015 年所有日期的向量,即:

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

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

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

非常感谢!此外,如果我知道如何从一个日期中删除天数,这将是一个很大的帮助。谢谢!

如果您的日期总是采用相同的格式,您可以通过简单的 cellfun 调用来实现:

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);

哪个returns:

newdates = 

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

cellfun 对元胞数组中的每个元胞应用一些函数。我在这里使用它的目的是使用应用于每个单元格的 myrange 索引创建一个新数组。请注意,这不是一种稳健的方法,一旦您的日期格式发生变化,它就会失效。

要获得更稳健的方法,您可以考虑使用 datenum and datestr:

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

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

哪个returns:

newdates =

01.2015
02.2015
03.2015
04.2015

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

由于所有字符串的格式都相同,因此您可以 select 每个字符串中从第 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'