5

我有一个文件,其中包含我试图在 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 完全陌生,因此将不胜感激任何帮助。提前致谢。

4

2 回答 2

1
  1. 您使用'space'字符串作为分隔符,这在textscan. 将其指定为' '
  2. 您希望将连续空格视为一个,因此您还应该将'MultipleDelimsAsOne'标志设置为 1。

正确的语法应该是:

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

如果您没有尝试修改 delimiter 选项,则默认情况下此行为会正确完成,因此只需省略所有选项:

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

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

-18.151346 2013 年 1 月 28 日星期一 11:33:08

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

于 2013-01-28T14:57:23.717 回答
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}

同样,此过程是完美的,但您可以将其用作提示。

于 2013-01-28T14:58:02.783 回答