从大文本文件中读取Matlab中的数据

时间:2012-10-01 07:20:58

标签: matlab import text-files

我有一个包含大量数据行的文本文件,其中列以空格分隔。如何用MATLAB读取这些数据?我尝试了以下代码但没有成功:

fid = fopen('file.txt');

M = textscan(fid, '%f %f %f');

x = M{1};

y = M{2};

z = M{3};

数据如下所示(列间距不等):

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

4.55686    0.88751    4.71368       0.00000       0.00000   879.7   0.143   1.77  1  1  Iron - Alpha

2 个答案:

答案 0 :(得分:3)

首先,考虑一下您的数据文件。每行包含10个数字和3个字符串。很容易认为它包含10个数字和1个字符串,但由于空格用作分隔符而字符Iron - Alpha未用引号括起来,因此它们会产生3个字符串,而不是1。

接下来,如果您在格式规范中提供输入行的完整描述,textscan将仅按您的意愿运行。例如,以下

 M = textscan(fid, '%f %f %f %f %f %f %f %f %f %f %s %s %s')

对我来说效果很好。由于您只需要前5列数据,并且读取所有数据,因此您可以轻松删除不需要的列。

如果您想要或者需要避免阅读不需要的数据,您必须更聪明一些。您可以指示textscan忽略这样的特定字段:

 M = textscan(fid, '%f %f %f %f %f %*f %*f %*f %*f %*f %*s %*s %*s')

仅读取每行中的前5个字段。该文档将指导您进一步完善阅读程序。

答案 1 :(得分:2)

请尝试dlmread。

data = dlmread('file.txt');

检查分隔符是否为空格。它可能包含不可见的char'\ t'。