关于以下数据:
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个浮点数?
答案 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
选项可以跳过文件开头的行?