我是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这不是一个正则表达式问题,请不要回复有关regexp的问题!
答案 0 :(得分: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