如何只将数值数据读入Matlab并忽略任何文本
我试图将数据读入Matlab,其中包含数行和文本,但我只想读取数值并跳过文本(无论何时出现)。我一直在使用textscan,但读取中的数字,但当它到达包含文本的列时,函数终止 这是我的第一篇帖子,所以我不熟悉如何在这里发布我的数据和代码,所以我在下面附上了一些数据:如何只将数值数据读入Matlab并忽略任何文本,matlab,textscan,Matlab,Textscan,我试图将数据读入Matlab,其中包含数行和文本,但我只想读取数值并跳过文本(无论何时出现)。我一直在使用textscan,但读取中的数字,但当它到达包含文本的列时,函数终止 这是我的第一篇帖子,所以我不熟悉如何在这里发布我的数据和代码,所以我在下面附上了一些数据: 0.37364 1.318 0.1090E-02 0.4885E-03 0.236E-02 0.527E-02 0.39237 1.372 0.1214E-02 0.5470E-03
0.37364 1.318 0.1090E-02 0.4885E-03 0.236E-02 0.527E-02
0.39237 1.372 0.1214E-02 0.5470E-03 0.211E-02 0.546E-02
0.41129 1.580 0.1612E-02 0.6992E-03 0.142E-02 0.588E-02
CF SET TO 0.000002 AT X= 0.430 ON SURFACE 1 (1=U/S, 2=L/S)
0.43038 3.070 0.4482E-02 0.1160E-02 0.200E-05 0.905E-02
HBAR MAX LIMIT REACHED
所以我想让Matlab读取包含数值数据的列,跳过包含文本的列
我感谢你的帮助,并提前感谢你
哈姆扎解决方案
result = [];
fid=fopen('data.txt');
while 1
tline = fgetl(fid);
if ~ischar(tline), break, end
celldata = textscan(tline,'%f %f %f %f %f %f');
matdata = cell2mat(celldata);
% match fails for text lines, textscan returns empty cells
result = [result ; matdata];
end
fclose(fid);
结果
result =
0.3736 1.3180 0.0011 0.0005 0.0024 0.0053
0.3924 1.3720 0.0012 0.0005 0.0021 0.0055
0.4113 1.5800 0.0016 0.0007 0.0014 0.0059
0.4304 3.0700 0.0045 0.0012 0.0000 0.0091
0.37364 1.318 0.1090E-02 0.4885E-03 0.236E-02 0.527E-02
0.39237 1.372 0.1214E-02 0.5470E-03 0.211E-02 0.546E-02
0.41129 1.580 0.1612E-02 0.6992E-03 0.142E-02 0.588E-02
CF SET TO 0.000002 AT X= 0.430 ON SURFACE 1 (1=U/S, 2=L/S)
0.43038 3.070 0.4482E-02 0.1160E-02 0.200E-05 0.905E-02
HBAR MAX LIMIT REACHED
data.txt
result =
0.3736 1.3180 0.0011 0.0005 0.0024 0.0053
0.3924 1.3720 0.0012 0.0005 0.0021 0.0055
0.4113 1.5800 0.0016 0.0007 0.0014 0.0059
0.4304 3.0700 0.0045 0.0012 0.0000 0.0091
0.37364 1.318 0.1090E-02 0.4885E-03 0.236E-02 0.527E-02
0.39237 1.372 0.1214E-02 0.5470E-03 0.211E-02 0.546E-02
0.41129 1.580 0.1612E-02 0.6992E-03 0.142E-02 0.588E-02
CF SET TO 0.000002 AT X= 0.430 ON SURFACE 1 (1=U/S, 2=L/S)
0.43038 3.070 0.4482E-02 0.1160E-02 0.200E-05 0.905E-02
HBAR MAX LIMIT REACHED
我提出了以下解决方案:
m=1;
for k=1:10; % create for loop ranging from start to finish of data
ful = sscanf(S{k,1},'%f'); % scan each line for a floating point number
le=size(ful); % gives size of the scanned values
if le(1) > 0 % Only read if there is a value of > 0 ( for non-floating i.e. string, the value = 0)
for t=1:le(1)
data1(m,t)=ful(t); % store the value in matrix
end
m=m+1;
end
end
这似乎很管用 如果可以将其保存为excel文件,则使用
xlsread
可以很容易地组合读取文本和数字。如果要继续使用textscan
,您的意思是要跳过包含非数字数据的行还是列?包含非数字数据的行似乎很难划分为列……包含文本的行能否以CF
或HBAR
以外的内容开头?有多少种不同类型的文本行?大家好,谢谢你们回复我!Dennis不能将其保存为excel文件。Darthbith我本想跳过这一行的,抱歉搞混了。Horchler有三种可能的方法可以开始这一行。谢谢你Tobold,我没有机会尝试你的方法,因为我想出了另一种方法,但非常感谢你发布这个答案!