1

我是 SO 和 Matlab 的新手,所以请原谅任何违规行为。我正在尝试将看似简单的时间戳字符串数组转换为等效的秒数数组。

我写了一个这个函数:

% Function to calculate seconds from a timestamp in the following format:
% ddd hh:mm:ss.SSSS (example: 123 12:59:00.9999)
function a = TimestampToS(stamp)

% Uses the "named tokens" facility of MATLAB's "regexp" function.
expr = ['(?<ddd>\d+)' ...                % ddd
        ' ' ...                          % Space " " separator
        '(?<hh>\d+)' ...                 % hh
        ':' ...                          % Colon ":" separator
        '(?<mm>\d+)' ...                 % mm
        ':' ...                          % Colon ":" separator
        '(?<ss>\d+)' ...                 % ss
        '.' ...                          % Dot "." separator
        '(?<SSSS>\d+)'];                 % SSSS

    parsedStamp = regexp(stamp, expr, 'names');

a = (str2double(parsedStamp.ddd) * 86400) + ...
    (str2double(parsedStamp.hh) * 3600) + ...
    (str2double(parsedStamp.mm) * 60) + ...
    (str2double(parsedStamp.ss)) + ...
    (str2double(parsedStamp.SSSS) * 0.0001);

它适用于单个字符串:

>> TimestamptoS('123 12:59:00.9999')

ans =

    1.067394099990000e+007

但是,如果我尝试使用单元格数组,我会得到:

Attempt to reference field of non-structure array.

我怎样才能得到一个秒数组?我尝试了输入数据和“parsedStamp”的各种转换,但没有任何效果。我不太了解 Matlab 或其矩阵表示法。任何帮助都感激不尽!
PS这不是一个正则表达式问题,请不要回复有关正则表达式的问题!

4

1 回答 1

0

你可以很容易地做到这一点,而无需修改你的功能,使用cellfun. 这实质上提取了元胞数组的每个元胞并将其传递给您的函数。

>> cellArray = {'123 12:59:00.9999','130 12:59:00.9999'}; % for example

>> cellfun(@TimestampToS,cellArray)

ans =
  1.0e+007 *
   1.067394099990000   1.127874099990000
于 2013-10-09T16:08:01.137 回答