2013-08-30 74 views
0

我有一些標頭和數字數據的大文本文件。我想忽略2列標題行和專門輸出的數據和4使用textscan在Matlab輸出數據

實施例數據

[headers] 
line1 
line2 
line3 

[data] 
1 2 3 4 
5 6 7 8 
9 10 11 12 

我已經使用以下代碼的嘗試:

FID = fopen('datafile.dat'); 
data = textscan(FID,'%f',4,'delimiter',' ','headerLines',4); 
fclose(FID); 

我只得到爲0x1細胞

+0

看起來你需要''headerLines',6',因爲'[data]'也是一個頭文件。 –

回答

1

的輸出試試:

FID = fopen('datafile.dat'); 
data = textscan(FID,'%f %f %f %f', 'headerLines', 6); 
fclose(FID); 

data將是1×4單元陣列。每個單元格將包含一個3x1的double值數組,它們是數據每列中的值。

你可以通過執行data{2}data{4}進入第2和數據的第四列。


隨着你的原代碼,主要的問題是數據文件有標題行,但您所指定的,目前只有。

此外,雖然,你會碰到與時代相匹配的formatSpec數的規範問題。就拿下面的代碼

data = textscan(FID,'%f',4);

其中規定,你將嘗試4次匹配浮點值。請記住,匹配4個值後,textscan將停止。因此,爲了簡單起見,讓我們假設你的數據文件只包含的數據(即沒有標題行),然後執行該代碼,多次時,你會得到以下結果:

>> FID = fopen('datafile_noheaders.dat'); 
>> data_line1 = textscan(FID,'%f', 4) 

data_line1 = 

    [4x1 double] 


>> data_line1{1}' 

ans = 

    1  2  3  4 

>> data_line2 = textscan(FID,'%f', 4) 

data_line2 = 

    [4x1 double] 

>> data_line2{1}' 

ans = 

    5  6  7  8 

>> data_line3 = textscan(FID,'%f', 4) 

data_line3 = 

    [4x1 double] 

>> data_line3{1}' 

ans = 

    9 10 11 12 

>> data_line4 = textscan(FID,'%f', 4) 

data_line4 = 

    [0x1 double] 

>> fclose(FID); 

注意textscan選秀權每次調用它時都會「停止」。在這種情況下,textscan第一三次被稱爲它從數據文件返回一行(在含有4×1 數據的列中單元格的形式)。第四次調用返回一個空單元格。對於你描述的用例,這種格式不是特別有用。

頂部給出的例子應該以一種格式返回數據,這種格式比你想要完成的任務要容易得多。在這種情況下,它會匹配在每個數據行四個浮點值,並將與文本的每一行繼續,直到它再也趕不上這種模式。

相關問題