首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用扫描数据扫描

使用扫描数据扫描
EN

Stack Overflow用户
提问于 2014-08-06 03:49:12
回答 1查看 401关注 0票数 2

我有以下一年的数据是这样的结构。这是一个实例的例子。此数据还存储在文本文件中。

代码语言:javascript
复制
1/1/2013  3:00:00 AM

我怎么看这些数据?到目前为止,这就是我所得到的,我错误地说:

在赋值A(I) = B中,B和I中的元素数必须相同。

这是我写的代码:

代码语言:javascript
复制
for i = 1:k
    str = dateAndTime{i,1};
    [A, count]=sscanf(str,'%u/%u/%u %u:%u:%*u %*c'); % month day year hour minutes seconds pm/am
    dateNumber(i) = datenum([A(3) A(1) A(2) A(4) A(5) 0 0]); % Y M D H M S PM/AM datenum returns decimal day 
end

请帮帮忙。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-08-06 04:50:30

您的sscanf语句略有错误。当您在秒字段中阅读时,在不应该有*的情况下,您错误地放置了一个one。您还需要去掉用于确定字符*AM/PM。您真正需要的是第一个字符AP。您想要去掉*的原因是希望读取矩阵A中每个元素的一个数字

当您这样做时,当您运行sscanf时,我们使用您在post中的数据作为示例,为A获得以下矩阵:

代码语言:javascript
复制
[A, count]=sscanf('1/1/2013  3:00:00 AM','%u/%u/%u %u:%u:%u %c');

A =

       1
       1
    2013
       3
       0
       0
      65

如你所见,A(1)是月份,A(2)是日子,A(3)是一年,A(4)是小时,A(5)是分钟,A(6)是第二。A(7)要么是65,要么是80来表示字符AP,因为这是每个字符的ASCII代码。因此,如果是A(7) = 80,我们需要在小时数中添加12,以表示这是在下午。datenum似乎没有第七个变量来表示它是在上午还是下午,所以我们需要通过增加小时来表示这一点。

因此,修改您的循环,使其看起来如下:

代码语言:javascript
复制
for i = 1:k
    str = dateAndTime{i,1};
    [A, count]=sscanf(str,'%u/%u/%u %u:%u:%u %c'); % month day year hour minutes seconds pm/am
    if (A(7) == 80) %// Check if it's in the morning or afternoon
        hour = 12;
    else
        hour = 0;
    end
    dateNumber(i) = datenum(A(3),A(1),A(2),A(4)+hour,A(5),A(6)); % Y M D H M S PM/AM datenum returns decimal day 
end

为了测试这一点,让我们看看当我们使用相同的字符串时会发生什么,但是在AM和PM中:

代码语言:javascript
复制
dateAndTime = {'1/1/2013  3:00:00 AM'; '1/1/2013  3:00:00 PM'};
k = numel(dateAndTime);

使用上面的内容,我们获得了存储在dateNumber中的以下输出

代码语言:javascript
复制
dateNumber =

 735235.13     735235.63

确保你做了format bank,这样你就可以看到它是这样的,否则它会用指数表示法打印,因为这是MATLAB中任何足够大的数字的默认表示形式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25151922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档