我正在阅读以逗号分隔的文本文件并使用textscan
进行解析。其中两个字段是日期和时间。我可以使用datenum
将这两个字段转换为小数天,以便将两个结果向量相加。
我的问题是,其中一条数据消息经常包含TIME字段,但不包括DATE字段。这由textscan
作为空字符串读入。我发现当datenum
遇到空字符串时,它返回一个空矩阵而不是NaN
值或其他填充值。这导致TIME和DATE的向量长度不同,并且没有明确指示如何对齐数据。
如何以保留数据顺序的方式处理这些空字符串?有没有办法让datenum
输出一个空值而不是简单地忽略该字段?我可以使用NaN
或0
或类似值来表示空字符串。如果可能的话,我宁愿保持这个矢量化,但我知道可能需要for
循环。
答案 0 :(得分:4)
一种简单的方法是使用logical indexing仅处理您的有效日期,并在输出中将空的日期初始化为0
。例如,如果您的日期位于cell array C
,则可以使用cellfun
和isempty
来获取索引,如下所示:
index = cellfun(@isempty, C);
out(index) = 0; % Empty dates are 0 in output
out(~index) = datenum(C(~index), 'ddmmyy');
或者,您可以先使用'0/0/0'
替换空字符串,该字符串将datenum
转换为0
。例如:
C(cellfun(@isempty, C)) = {'0/0/0'};
但是,此转换不适用于您的特定'ddmmyy'
格式(即datenum('000000', 'ddmmyy')
无法返回0
,即使指定PivotYear
也是如此}参数)。第一种选择可能是你最好的选择。