在Matlab中拆分时间戳

时间:2013-01-28 14:51:46

标签: matlab textscan

我有一个文件,其中包含我想在Matlab中拆分的数据值和时间戳。 格式如下:

-18.151346    Mon Jan 28 11:33:08 2013

我正在使用textscan功能尝试拆分它。

data=textscan(fid,'%f%s%s%f%s%n','delimiter','space');

我正在尝试将时间戳拆分为单独的列,以便我可以使用时间而不是日期或年份。我看了一些以前非常相似的问题,但由于某些原因,我无法让它做我想做的事。我得到的单元格数组采用这种格式。

Column 1     Column 2   Column 3 
-18.151346   Mon       Jan 28 11:33:08 2013

我对Matlab完全陌生,所以任何帮助都将不胜感激。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

  1. 您使用'space'字符串作为分隔符,这在textscan中是非法的。请改为将其指定为' '
  2. 您希望将连续空格视为一个,因此您还应将'MultipleDelimsAsOne'标记设置为1.
  3. 正确的语法应该是:

    textscan( fid, '%f%s%s%s%s%n', 'delimiter', ' ', 'MultipleDelimsAsOne', 1);
    

    如果您没有尝试修改分隔符选项,默认情况下这种行为已经正确完成,所以只省略所有选项:

    textscan( fid, '%f%s%s%s%s%n');
    

    另请注意,您需要为空格包围的字符串中的每个项目添加一个标记。换句话说,对于这样的字符串:

      

    -18.151346 Mon Jan 28 11:33:08 2013

    字符串形式的时间戳将存储在结果单元格数组的第5列中。

答案 1 :(得分:0)

要阅读我使用regexp的时间戳。

我要建议的解决方案可以进行优化,但至少可以在第一次尝试时为您提供帮助。

A = regexp(str,'[^\s]+','match');

这样就可以匹配字符串中的所有正则表达式。然后,您知道valuestime存储为元素1和5。

我做了一个简短的测试:

cell = {'-18.151346 Mon Jan 28 11:33:08 2013','19.33333 Tue Feb 29 10:12:23 2012'};

这会引导您进入单元格A{1,2}

同样,这个程序是可以完善的,但您可以将其用作提示。