2012-12-31 34 views
0

我有一個數據集,我正在逐行閱讀磁盤,我想將其中一列數據轉換爲一個浮點數(範圍爲0-23.99999)(當天)。在八度中使用textscan()...如何正確格式化?

的數據看起來像下面這樣:

2010/01/01,00:00:00.979131, 27.4485, 51.9362, 14.8, 6 
2010/01/01,00:00:01.021977, 27.5149, 51.9375, 16.0, 6 
2010/01/01,00:00:01.074032, 27.4797, 51.9446, 14.5, 10 
2010/01/01,00:00:01.663689, 25.8441,-152.8141, 14.6, 6 
2010/01/01,00:00:01.639541, 25.8744,-152.6122, 1.5, 5 
2010/01/01,00:00:02.232099, -2.2447, 11.5023, 18.8, 6 
2010/01/01,00:00:02.256351, -0.8135, 27.3139, 17.7, 5 
2010/01/01,00:00:02.306734, -2.7797, 28.5109, 26.0, 5 
2010/01/01,00:00:02.620765, 25.6656,-154.2029, 26.2, 9 
2010/01/01,00:00:02.658495, 25.6698,-154.2157, 23.0, 6 
2010/01/01,00:00:02.731266, -5.7106, 126.4517, 3.6, 5 
2010/01/01,00:00:02.787495, -5.7138, 126.5210, 24.4, 8 
2010/01/01,00:00:02.811636, -3.2453, 124.6919, 21.1, 8 

列2(例如,00:00:00.979131)感興趣,我想這樣做

setenv GNUTERM 'x11'; 
fid = fopen('myfile.txt', 'r'); 
m = textscan(fid, '%d%d%d%d/%d%d/%d%d, %d%d:%d%d:%d%f, %f, %f, %f, %d'); 
mx = m(:, 5); %here, I would expect to grab 14.8, 16.0, etc 
my = m(:, 2)/24.0; %here, all data from timestamp column (00:00:00.979131, for ex) 
plot(mx, my); 

問題是我傳遞給textscan的字符串對我的數據格式不正確。 在軍事時間內,該號碼的格式是「hrs:minutes:seconds」。 如何訪問/轉換變量值mxmy的值?

感謝, JML

+1

'csvread'不適合這項任務。嘗試'textscan' – carandraug

+0

好吧,我更新了我的代碼和問題。我在做什麼錯誤w/r/t textscan()的輸入? – jml

+0

我也試過'%d /%d /%d,%d:%d:%f,%f,%f,%f,%d',無濟於事。 – jml

回答

4

textscan的輸出是單元陣列。如果你在你的答案使用命令:

m = textscan(fid, '%d/%d/%d %d:%d:%f %f %f %f %d', 'delimiter', ','); 

然後拿到14.9垂直矢量,16.0,14.5:

MyNinthField = m{9}; 

MyNinthField = 
14.8000 
16.0000 
14.5000 
14.6000 
1.5000 
18.8000 
17.7000 
26.0000 
26.2000 
23.0000 
3.6000 
24.4000 
21.1000 

然後,爲了獲得從那一天開始的時間戳(秒):

Hours = double(m{4}); 
Minutes = double(m{5}); 
Seconds = m{6}; 

對於Secondsdouble是不需要的,因爲​​已經double。但是,m{4}m{5}都是int32

要獲得一天的時間(秒),所有你需要的是:

TimeOfDayInSeconds = 3600*Hours+60*Minutes+Seconds; 

TimeOfDayInSeconds = 
0.97913 
1.02198 
1.07403 
1.66369 
1.63954 
2.
2.25635 
2.30673 
2.62077 
2.65849 
2.73127 
2.78749 
2.81164 

如果你沒有做類型轉換,從int32double,八音會截斷值的整數。但是,MATLAB甚至不允許整數和雙數組之和。

希望這會有所幫助。

+0

感謝您提供清晰完整的答案。 – jml

0

看起來你可以這樣做:

m = textscan(fid, '%d/%d/%d %d:%d:%f %f %f %f %d', 'delimiter', ','); 

...這,雖然它的工作原理,它把時間格式VAR,我想進入的多個部分變種。有總比沒有好。如果任何人有關於如何連接這些變量的建議,我想閱讀更多。謝謝!

相關問題