2012-08-15 21 views
1

我想在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 ... 

它的实际长度超过10万行,但你的想法。使用load()命令会因为每行结尾处的'...'而引发错误。我要找的所有内容都是在前四栏中阅读。

什么是加载数据的最有效的方式,而在最后完全省略了无用的椭圆列?不涉及使系统解析整个文本文件两次的方法会更好,尽管不是必需的。

+1

中间卫生程序如何?有很多命令行工具可以轻松解决问题。 – TheZ 2012-08-15 17:57:50

+0

你能否详细说明一下?我应该指出,我希望尽可能多地保留MATLAB中的代码,而不是依靠外部实用程序 – CaptainProg 2012-08-15 17:59:46

+0

噢好吧,我会延期。 – TheZ 2012-08-15 18:01:15

回答

6

如果不是使用负载,而是使用textscan,这很容易。您可以将最后一列当作字符串列,然后忽略它。

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

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

data = [data{1:4}]; 

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