2013-10-09 30 views
1

我是SO和Matlab的新手,請原諒任何違規行爲。 我試圖將看似簡單的時間戳字符串數組轉換爲等效的秒數組。在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

通過使用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 
+0

完美答案路易斯,謝謝你的時間。我希望這可以作爲未來其他人的參考! PS對不起,我沒有足夠的聲望尚未得到讚揚。 – fodfish

+0

@fodfish很高興能幫到你:-)歡迎來到StackOverflow! –