如何使用`datenum`处理空字符串

问题描述 投票:3回答:1

我有一个以逗号分隔的文本文件,我正在阅读并使用textscan进行解析。其中两个字段是日期和时间。我能够使用datenum将两个字段转换为小数天,并且意图将两个结果向量相加。

我的问题是,每隔一段时间,其中一条数据信息就包含TIME字段,但不包括DATE字段。这被textscan读作空字符串。我发现当datenum遇到空字符串时,它返回一个空矩阵而不是NaN值或其他填充值。这导致TIME和DATE的向量长度不同,并且没有明确指示如何对齐数据。

如何以保留数据顺序的方式处理这些空字符串?有没有办法让datenum输出一个空值而不是简单地忽略该字段?我可以使用NaN0或类似值来表示空字符串。如果可能的话,我宁愿保持这个矢量化,但我知道for循环可能是必要的。

matlab date parsing is-empty
1个回答
4
投票

一种简单的方法是使用logical indexing仅处理有效日期,并在输出中将空的日期初始化为0。例如,如果你在cell array C中有你的日期,你可以使用cellfunisempty得到索引,如下所示:

index = cellfun(@isempty, C);
out(index) = 0;  % Empty dates are 0 in output
out(~index) = datenum(C(~index), 'ddmmyy');

或者,您可以先用'0/0/0'替换空字符串,0将转换为datenum。例如:

C(cellfun(@isempty, C)) = {'0/0/0'};

但是,这种转换不适用于您的特定'ddmmyy'格式(即,即使指定datenum('000000', 'ddmmyy')参数,0也不会返回PivotYear)。第一个选项可能是您最好的选择。

© www.soinside.com 2019 - 2024. All rights reserved.