2013-07-08 52 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