从excel导入时防止Matlab截断时间戳

时间:2015-05-15 04:56:09

标签: matlab timestamp

我正在将一个excel的时间戳文件导入Matlab。似乎每当我在午夜时分有一个时间戳,即'13 / 5/2015 12:00 PM',我的matlab将只读它'13 / 5/2015'。

Excel samples
'13/5/2015 12:00 PM'
'13/5/2015 12:01 PM'

使用[NA1,NA2,Raw]导入Matlab = xlsread('excel.xls');

Raw = {
'13/5/2015';
'13/5/2015 12:01 PM'}

这实际上阻止了我使用相同格式的datenum。从excel导入时,如何防止Matlab截断时间戳?

1 个答案:

答案 0 :(得分:2)

您可以通过查找以字母结尾的条目并在字符串末尾添加12:00 AM来自行添加时间。然后可以将其用于datenum。为此,我们可以使用regular expressions并搜索最后没有任何字母的单元格,然后对于每个单元格,最后添加12:00 AM

这样的事情:

ind = ~cellfun(@isempty, regexp(Raw, '\d*$'));
strings = Raw(ind);
padded_strings = cellfun(@(x) [x ' 12:00 AM'], strings, 'uni', 0);
Raw(ind) = padded_strings;

第一行代码有点混淆,但很容易解释。让我们先看一下嵌套命令:

regexp(Raw, '\d*$')

regexp是MATLAB的正则表达式命令。正则表达式寻求在字符串中查找模式。你在这里做的是指定一个字符串或字符串的单元格数组,regexp的目标是找到每个字符串中该模式匹配的位置的位置。在这种情况下,我正在做的是找到以数字结尾的字符串。如果我找到这样的模式,那么结果将为空。因此,如果你提供一个字符串的单元格数组,你会得到另一个单元格数组作为输出,其中每个元素告诉你找到模式的位置索引。

因此,如果我们获得一个字符串的索引,这意味着它以数字结尾,如果它是空的,那么它以数字结束。我使用cellfun遍历regexp结果并返回logical向量,该向量确定每个单元格数组是否为空或者其中包含某些内容。但是,我想要相反,这就是我采用逆(~)的原因。我现在可以使用此输出切入Raw单元格数组,并选出最后以数字结尾的字符串。

切片在第二行代码中完成。一旦我拿出这些字符串,我运行另一个cellfun(第三行)调用,在字符串的末尾附加一个12:00 AM字符串,并设置uni=0标志,因为输出是一个单元格数组,不再是简单的数字/逻辑数组。一旦我从第三行获得了这个输出单元格数组,我就会使用第一行代码中的索引切换回原始单元格数组,并将这些填充的字符串放在里面。

在我的示例单元格数组上运行上面的代码后,我得到了这个:

Raw = 

    '13/5/2015 12:00 AM'
    '13/5/2015 12:00 PM'