2013-07-08 53 views
1

在像數據:減少表達textscan

student_id數據| Test1 | Test2 | TEST3

1 91.5 89.2 77.3

2 88.0 67.8 91.0

3 76.3 78.1 92.5

4 96.4 81.2 84.6

如果我使用

fileID = fopen('grades.txt'); 
formatSpec = '%s'; 
N = 4; 
C_text = textscan(fileID, formatSpec, N, 'delimiter', '|'); 

then Matlab的將使用。讀取列標題格式'%s'四次。

但我怎麼能以更簡單的方式類似

textscan(fileID, '%f %f %f %f %f %f %f %*f %f %f %f %f %f %f %f', 'delimiter', '|'); ,我想讀頭七輛花車,忽視了第八和閱讀七大花車寫?

回答

2

的一個方法是產生一個格式字符串動態,而不是硬編碼:

formatSpec = [repmat('%f', 1, 7), '%*f', repmat('%f', 1, 7)]; 

然後,您可以此格式字符串傳遞給textscan

另一種方法是用數字來讀取行字符串,然後使用str2num將它們轉換成數值,並丟棄你不想要的列,這樣的事情:

C = textscan(fileID, '%s', 'delimiter', '\n'); 
vals = cell2mat(cellfun(@str2num, C{:}, 'UniformOutput', false)); 
vals(:, 8) = []; 

PS
您知道嗎textscan有一個HeaderLines選項可跳過文件開頭的行?

+0

問題是我正在處理的文件沒有標題。 – bigTree

+0

@bigTree然後你會怎樣稱呼文件中的第一行? –

+0

實際上,生成文件的人只給我一個沒有標題的版本(但的確,在原始文件中,第一行有標題) – bigTree