我有一个包含大量数据行的文本文件,其中列以空格分隔。如何用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
答案 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'。