load() - 忽略给定的字符串

时间:2012-08-15 17:55:44

标签: matlab-load

我正在尝试使用MATLAB中的load()函数从文本文件中读取数据。但是,文本文件的每一行都以“...”结尾。数据文件不是由MATLAB生成的,所以我无法控制省略号的来源。

我加载的数据文件看起来像这样:

11191425        NaN     NaN     0.0 ...
11191426        NaN     NaN     0.0 ...
11191427        NaN     NaN     0.0 ...
11191428        NaN     NaN     0.0 ...
11191429     2280.5  1910.1   455.0 ...
11191430     2280.5  1910.1   455.0 ...
11191431     2298.0  1891.1   454.0 ...
11191432     2317.3  1853.7   453.0 ...
11191433     2335.6  1811.1   458.0 ...
11191434     2350.6  1769.8   466.0 ...
11191435     2365.3  1729.7   475.0 ...
11191436     2379.5  1691.2   485.0 ...
11191437     2378.3  1647.6   492.0 ...
11191438     2375.4  1621.3   499.0 ...
11191439     2372.7  1598.5   499.0 ...
11191440     2372.7  1598.5   499.0 ...
11191441        NaN     NaN     0.0 ...
11191442      294.9  1283.5  1163.0 ...
11191443      294.9  1283.5  1163.0 ...

它的实际长度超过100,000行,但你明白了。使用load()命令会因为每行末尾的“...”而引发错误。我正在寻找的是阅读前四列。

最有效的加载数据的方法是什么,同时完全省略最后的流氓列的流氓列?一种不涉及使系统解析整个文本文件两次的方法将是更可取的,尽管不是必需的。

1 个答案:

答案 0 :(得分:6)

如果不使用加载,则使用textscan非常简单。您可以将最后一列视为字符串列,然后忽略它。

fid = fopen('data.txt');
data = textscan(fid,'%d %f %f %f %s');
fclose(fid);

然后,您可以通过连接要保留在一起的列来使输出成为单个矩阵。

data = [data{1:4}];

第五列刚填充'...'字符串。你可以忽略它。