如何在循环中从字符数组中提取特定索引?

How to pull specific indices out of a character array in a loop?

我有一个包含多个日期的数组,格式为 yyyymmdd,存储为 50x1 双精度数。我正在尝试提取年、月和日,以便我可以使用 datenum 为每个日期分配一个序列号。

索引单个日期,使用 str2num 转换,然后索引并提取适当的值工作正常,但是当我尝试遍历日期列表时它不起作用 - 仅返回数字 2 的变体.

dates = [20180910; 20180920; 20181012; 20181027; 20181103; 20181130; 20181225];

% version1
datesnums=num2str(dates); % dates is a list of dates stored as 
integers

for i=1:length(datesnums)
    pullyy=str2num(datesnums(1:4));
    pullmm=str2num(datesnums(5:6));
    pulldd=str2num(datesnums(7:8));
end

以及

%version2
datesnums=num2str(dates,'%d')

for i = 1:length(datesnums)
    dd=datenum(str2num(datesnums(i(1:4))),str2num(datesnums(i(5:6))), 
    str2num(datesnums(i(7:8))));
end

我正在尝试生成一个新数组,它只是输入日期的序列号。在显示的示例中,我只得到单个整数值,我知道这是因为循环不正确,并且我得到的错误是 "Index exceeds the number of array elements (1)." for version 1。当我成功循环所有内容时,对于每个不正确的日期,输出只是 '2222','22,'22'。我究竟做错了什么?我需要加入元胞数组吗?

循环获取所有年月日:

datesnums=num2str(dates);

for i=1:size(datesnums, 1)
    pullyy(i) = str2num(datesnums(i,1:4));
    pullmm(i) = str2num(datesnums(i,5:6));
    pulldd(i) = str2num(datesnums(i,7:8));
end

实际上,您可以无需循环:

pullyy = str2num(datesnums(:,1:4));
pullmm = str2num(datesnums(:,5:6));
pulldd = str2num(datesnums(:,7:8));

解释:

如果 dates 向量是一个 [6x1] 数组:

dates =[...
    20190901
    20170124
    20191215
    20130609
    20141104
    20190328];

datesnums=num2str(dates); 创建一个大小为 [6x8] 的字符矩阵,其中每一行对应于 dates 中的一个元素:

datesnums =

  6×8 char array

    '20190901'
    '20170124'
    '20191215'
    '20160609'
    '20191104'
    '20190328'

所以在循环中你需要参考每个日期的行索引和列索引来提取年月日。

我能想到的最简单的解决方案是:

SN = datenum(num2str(dates),'yyyymmdd')

您只需指定日期格式 'yyyymmdd'