减少文本中的表达式

时间:2013-07-08 14:56:43

标签: matlab

关于以下数据:

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', '|'); 在哪里我想读前7个浮点数,忽略第8个浮点数并读取最后7个浮点数?

1 个答案:

答案 0 :(得分: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) = [];

<强> P.S
您是否知道textscan有一个HeaderLines选项可以跳过文件开头的行?