2012-01-04 46 views
0

在我的代碼中,我使用不同的文本文件來獲得流逝的時間和溫度。然後情節的溫度和時間 文本文件有這樣的Datenum Matlab:

Date; Time; Temp °C 
06.12.2011; 10:35:11;-24.13 
06.12.2011; 10:36:34;-24.00 
06.12.2011; 10:37:56;-23.88 
. 
. 
. 
. 

header=fgetl(fid); 
data=textscan(fid,'%s','delimiter',';'); 
fclose(fid); 
data=data{:}; 
day=data(1:3:end); 
hour=data(2:3:end); 
temp=str2double(data(3:3:end)); 
time=cellfun(@(x) sprintf('%s %s',day{strcmpi(hour,x)},x),hour,'uniformoutput',0); 
timen=datenum(time,'dd.mm.yyyy HH:MM:SS'); 
seconds=timen*86400/60; 
plot(seconds-seconds(1),temp); 
xlabel('Time(mins)'); 
ylabel('Temp °C'); 

但現在當經過的時間是在文本文件大於24個小時(溫度讀數持續超過一天),該datenum數據給出了一個錯誤

Error using ==> dtstr2dtnummx 
    Failed on converting date string to date number. 

任何建議,爲什麼發生這種情況,我嘗試使用在命令行模式下可以正常罰款相同

+0

好像在一個條目的日期字符串在'time'變量與'dd.mm.yyyy HH:MM:SS'格式不匹配。例如,對於'datenum('12 .10.2010 A:B:C','dd.mm.yyyy HH:MM:SS'),你會得到同樣的錯誤。 – Kavka 2012-01-04 14:37:46

回答

2

datenum接收值每小時大於24時,對於沒有失敗我例如:

>> time = '06.12.2011 53:31:11'; 
>> timen=datenum(time,'dd.mm.yyyy HH:MM:SS'); 
>> datestr(timen,'dd.mm.yyyy HH:MM:SS') 

ans = 

08.12.2011 05:31:11 

但是,試圖運行你的代碼,我沒有得到同樣的錯誤,但在情況下,當有與同一時間標記兩點意見。這是因爲該行:

time=cellfun(@(x) sprintf('%s %s',day{strcmpi(hour,x)},x),hour,'uniformoutput',0); 

將串聯的day多個值和hour一個值產生無效的時間字符串,如'07.12.2011 07.12.201110:36:11 '

因爲它看起來像你想的time每觀察一個值(如不是每一個unique(hour)),我建議計算time作爲

time = strcat(day,{' '},hour)