Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何只将数值数据读入Matlab并忽略任何文本_Matlab_Textscan - Fatal编程技术网

如何只将数值数据读入Matlab并忽略任何文本

如何只将数值数据读入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

我试图将数据读入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.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,我没有机会尝试你的方法,因为我想出了另一种方法,但非常感谢你发布这个答案!