使用str2num提供一个代表时间的单独文件

问题描述:

我有一个数据标题ABCDE_D20110507T11522323这表示数据是在2011年5月7日的时间(T之后)11:52:23:23收集的。 使用这个剧本,我应该能够提取这些信息使用str2num提供一个代表时间的单独文件

fnames=dir('ABCDE*.mat') 
hour=str2num(fnames(1).data(11:18)) 

(11:18)代表字符数 我在做什么错?我应该在脚本中指定我想要的格式,例如(HH,MM,SS)吗? 预先感谢任何帮助

+4

'dir'不给我一个叫'data'的字段。你的意思是'日期'或'名字'? – Dan 2013-02-28 12:38:48

+0

你能解释一下你在努力实现一个更清晰的目标吗?你是否试图从文件名提取时间信息? – HebeleHododo 2013-02-28 12:38:58

+0

字符11:18不对应于我可以找到的任何时间字符串,无论是在dir的日期字段还是您提供的名称中。第三:在时间表示中是不寻常的。最后的23代表什么?百分之一秒?然后用一个小数代替。并描述你想要的输出。 Matlab的datenum? – Peter 2013-02-28 13:58:13

您可以从文件名获得完整的日期,然后提取小时。

fnames = dir('ABCDE*.mat'); 
for idx = 1:size(fnames, 1) 
    str(idx,:) = fnames(idx).name(8:22) 
    dateVector(idx,:) = datevec(str(idx,:), 'yyyymmddTHHMMSS') % Convert the string to date vector 
    hrs(idx,:) = dateVector(idx,4:6) 
end 

假设您的目录中有两个文件。您的变量将如下:

str = 

20130228T171052 
20130228T143122 

dateVector = 

     2013   2   28   17   10   52 
     2013   2   28   14   31   22 


hrs = 

    17 10 52 
    14 31 22 

hrs将是小时,分钟和秒。

+0

这正是我要找的。谢谢。然而,我试图把这条线放在str = fnames.name(8:22),我得到了以下错误。有什么建议么? 请求的输出太多。 最可能的原因是缺少[] 约在 左侧有一个逗号分隔的列表扩展名为 。 – user2013590 2013-02-28 15:10:15

+0

@ user2013590该代码仅适用于一个文件。我更新了它。它应该适用于多个文件。 – HebeleHododo 2013-02-28 15:47:57

+0

太棒了,非常感谢你的帮助 – user2013590 2013-02-28 18:09:59

如指出丹,你需要引用场name的结构阵列fnames(而不是data这是无效的)。

hour = str2double(fname(1).name(17:18)); 
+0

我的错误是一个错误的为什么会使用str2double比str2num更有益? – user2013590 2013-02-28 14:29:32