2012-01-04 4 views
0

私のコードでは、経過時間と温度を得るために別のテキストファイルをループしています。経過時間がテキストファイルで24時間(温度が1日以上最後を読んで)、関数datenumよりも大きい場合、その後のプロットの温度と時間 は、テキストファイルには、今、この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は私に失敗しなかった
+0

それは 'time'変数内のエントリのいずれかで、日付文字列のように思えるようtimeを計算することをお勧め'dd.mm.yyyy HH:MM:SS'形式と一致しません。たとえば、 'daten('12 .10.2010 A:B:C '、' dd.mm.yyyy HH:MM:SS ')の場合と同じエラーが発生します。 – Kavka

答えて

2

が、私はコマンドラインで同じを使用してみました、それが正常に動作し、エラー

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

になぜこれが起こっている任意の提案を与えます例:

>> 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 

はしかし、あなたのコードを実行しようとしているときに、私は同じエラーを取得しましたが、場合によっては、同じタイムスタンプを持つ2つの観測があったとき。

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

(のような複数のdayの値と、あなたが観測あたりtimeの一つの値をしたいように見えるので、無効な時刻文字列のような'07.12.2011 07.12.201110:36:11 '

を生成hourの一つの値を連結します:行があるためそれが起こりますunique(hour)に1つ)に反対し、私は

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