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

标签 matlab date parsing is-empty

我有一个逗号分隔的文本文件,我正在使用 textscan 读取和解析它。其中两个字段是日期和时间。我可以使用 datenum 将这两个字段转换为小数天数,目的是对两个结果向量求和。

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

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

最佳答案

一种简单的方法是使用 logical indexing仅处理您的有效日期,并在输出中将空日期初始化为 0。例如,如果您的日期在 cell arrayC,你可以使用 cellfunisempty像这样获取索引:

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 参数)。第一个选项可能是您最好的选择。

关于matlab - 如何使用 `datenum` 处理空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48079918/

相关文章:

javascript - Moment.js 接受 12 小时和 24 小时时间

matlab - 多个不同大小的输出函数?

javascript - 使用 Moment Timezone 格式化指定时区的日期

javascript - 生成一年内的随机日期并赋值给var

c - 递归解析 - 括号

java - 解析 JSONArray 时出现的 Jersey 问题

matlab - 如何在 Matlab 中优化嵌入循环索引以实现并行化?

MATLAB - 像素化绘图并将其制作成热图

Matlab 调试 - 初级水平

python - 按日期排序字典列表