2014-05-14 53 views
1

我有一個格式化的文本文件。不知何故,當我使用importdata時,它會在發生NaN時在一些行後停止。現在我只想導入某個列,因爲我知道,不會有任何NaN。是否可以只使用importdata讀取某個列或避免在發生NaN後停止?只在Matlab中導入某一列與importdata

謝謝!

A B C 
t1 0.1 --- 
t2 -1 0 
t3 0.3 --- 

分隔符是單個空格。如果我將它導入Excel,我的文本文件中的每一列在Excel文件中都有自己的列。 在這個例子中,我只想要導入B列,這樣我就必須在結構中。數據

0 
-1 
0.3 
+0

與我們分享您的輸入數據的一些示例,從而給我們的想法有關使用的分隔符(一個或多個),如果可能的預期產出也是如此。 – Divakar

+0

謝謝。完成... – Baloo

+0

你在尋找一個結構輸出嗎? – Divakar

回答

0

IMPORTDATA方法

對於電池陣列的輸出,你可以使用這個 -

a1 = importdata(filepath,'%s') %//' filepath is the path to your text file 
s1 = regexp(a1,'\s','Split') 
out = cellfun(@(x) x(:,2), s1(2:end)) %// expected output as a cell array 

如果你想有一個雙陣列作爲輸出,使用上面的代碼後 -

out = str2double(out) 

Textscan方法

fid = fopen(filepath,'r'); %//' filepath is the path to your text file 
d1 = textscan(fid,'%s %f %s','HeaderLines',1); 
out = d1{1,2} %// out is expected output as a double array 
fclose(fid); 

編輯1:

a1 = importdata(filepath,'%s') %//' filepath is the path to your text file 
s1 = regexp(a1,'\s','Split') 

s1 = s1(cellfun(@numel,s1)>1) %//' removes rows like `---` or empty lines 
out = cellfun(@(x) x(:,2), s1(2:end)) 

out = str2double(out); 
out = out(~isnan(out)) %// expected output as a double array 
+0

我不能做一個vertcat,因爲dimensons不一致。但我想我現在可以通過遍歷所有單元格數組並捕獲右列來修復它。 – Baloo

+0

@Baloo看看編輯好的「Textscan Approach」是否適合你。 – Divakar

+0

@Baloo並修復了'importdata'的代碼,以使它適用於不一致的尺寸! – Divakar