2016-02-03 74 views
0

我希望能夠導入包含46行標題,然後是4 x6列數據的文件。我試圖從以前的答案中使用這個例子,但是textscan不能工作。Matlab跳過overheader導入文本文件(後續)

這是我的測試文件:ImportTest.txt

1.0 2.0 3.0 1.1 2.1 3.1 1.2 2.2 3.3

下面是代碼。 strData大小不同。爲什麼?

%open file 
fid = fopen('ImportTest.txt'); 
strData = textscan(fid,'%s%s%s%s', 'Delimiter',',') 
fclose(fid); 

%# catenate, b/c textscan returns a column of cells for each column in the data 
strData = cat(2,strData{:}) ; 

%# convert cols 3:6 to double 
doubleData = str2double(strData(:,3:end)); 

%# find header rows. headerRows is a logical array 
headerRowsL = all(isnan(doubleData),2); 

%# since I guess you know what the headers are, you can just remove the header rows 
dateAndTimeCell = strData(~headerRowsL,1:2); 
dataArray = doubleData(~headerRowsL,:); 

%# and you're ready to start working with your data 

回答

0

可以使用dlmread函數讀取輸入文件:

header_rows=5; 
delim_char=' '; 
C=dlmread('ImportTest.txt',delim_char,header_rows,0) 

在呼叫時,可以指定標題行的numember跳過(header_rows,在本例中)和分隔符(示例中的delim_char)。

調用中的最後一個參數(0)定義了數據開始的列。

從文本文件中讀取的數據直接存儲在數組中(本例中爲C)。

鑑於這種開關輸入文件(用5個標題行):

header line 1 
header line 2 
header line 3 
header line 4 
header line 5 
1.0 2.0 3.0 
1.1 2.1 3.1 
1.2 2.2 3.3 

輸出將是:

C = 

    1.0000 2.0000 3.0000 
    1.1000 2.1000 3.1000 
    1.2000 2.2000 3.3000 

作爲替代方案,可以使用importdata

header_rows=5; 
delim_char=' '; 
c=importdata('ImportTest.txt',delim_char,header_rows) 

在這種情況下,輸出將是一個結構:

c = 

      data: [3x3 double] 
     textdata: {5x3 cell} 
    colheaders: {'header' 'line' '5'} 

數據存儲在「數據」字段中,即「textdata」字段中的5個標題行。

最後的標題行也被解釋爲數據的實際標題。

希望這會有所幫助。

Qapla'