如何使用`datenum`处理空字符串
How to handle empty strings with `datenum`
我有一个逗号分隔的文本文件,我正在使用 textscan
读取和解析它。其中两个字段是日期和时间。我可以使用 datenum
将这两个字段转换为小数天数,目的是对两个结果向量求和。
我的问题是,每隔一段时间,其中一条数据消息就会包含 TIME 字段,但不包含 DATE 字段。 textscan
将其作为空字符串读入。我发现当 datenum
遇到空字符串时,它 returns 是一个空矩阵而不是 NaN
值或其他填充值。这导致 TIME 和 DATE 的向量长度不同,并且没有明显的指示如何对齐数据。
如何以保留数据顺序的方式处理这些空字符串?有没有办法让 datenum
输出空值而不是简单地忽略该字段?我可以使用 NaN
或 0
或类似的值来指示空字符串。如果可能的话,我宁愿保持这个矢量化,但我知道可能需要一个 for
循环。
一种简单的方法是使用 logical indexing to process only your valid dates, and initialize the empty ones to 0
in the output. For example, if you have your dates in a cell array C
, you could use cellfun
and 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')
永远不会 return 0
,即使指定 PivotYear
参数)。第一个选项可能是您最好的选择。
我有一个逗号分隔的文本文件,我正在使用 textscan
读取和解析它。其中两个字段是日期和时间。我可以使用 datenum
将这两个字段转换为小数天数,目的是对两个结果向量求和。
我的问题是,每隔一段时间,其中一条数据消息就会包含 TIME 字段,但不包含 DATE 字段。 textscan
将其作为空字符串读入。我发现当 datenum
遇到空字符串时,它 returns 是一个空矩阵而不是 NaN
值或其他填充值。这导致 TIME 和 DATE 的向量长度不同,并且没有明显的指示如何对齐数据。
如何以保留数据顺序的方式处理这些空字符串?有没有办法让 datenum
输出空值而不是简单地忽略该字段?我可以使用 NaN
或 0
或类似的值来指示空字符串。如果可能的话,我宁愿保持这个矢量化,但我知道可能需要一个 for
循环。
一种简单的方法是使用 logical indexing to process only your valid dates, and initialize the empty ones to 0
in the output. For example, if you have your dates in a cell array C
, you could use cellfun
and 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')
永远不会 return 0
,即使指定 PivotYear
参数)。第一个选项可能是您最好的选择。