2012-01-04 41 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)