Matlab-包含数字和等号的字符串

Matlab-包含数字和等号的字符串,matlab,file,file-io,Matlab,File,File Io,我有一个数据文件,其中包含参数名和值,它们之间有一个等号。是这样的: A = 1234 B = 1353.335 C = D = 1 等号前后总是有一个空格。问题是有些变量没有像上面的C那样赋值,我需要剔除它们 我想将数据文件文本读入一个单元格,然后删除包含这些无效语句的行,或者创建一个没有这些语句的新数据文件 无论哪一个更容易,但我最终会使用textscan命令将文件读入一个单元格 数值将被视为双精度 请帮忙 谢谢, Eric如果您只想获取变量,并拒绝没有任何字符的行,这可能会起作用。da

我有一个数据文件,其中包含参数名和值,它们之间有一个等号。是这样的:

A = 1234
B = 1353.335
C = 
D = 1
等号前后总是有一个空格。问题是有些变量没有像上面的C那样赋值,我需要剔除它们

我想将数据文件文本读入一个单元格,然后删除包含这些无效语句的行,或者创建一个没有这些语句的新数据文件

无论哪一个更容易,但我最终会使用textscan命令将文件读入一个单元格

数值将被视为双精度

请帮忙

谢谢,


Eric

如果您只想获取变量,并拒绝没有任何字符的行,这可能会起作用。data.txt只是由您给出的数据示例生成的一个txt:

fid = fopen('data.txt');

tline = fgets(fid);
while ischar(tline)
    tmp = cell2mat(regexp(tline,'\=(.*)','match'));
    b=str2double(tmp(2:end));
    if ~isnan(b)
        disp(b)
    end
    tline = fgets(fid);
end

fclose(fid);
我正在逐行读取txt文件,并使用通用表达式去除无用字符,然后转换为读取值的两倍。

尝试以下方法:

fid = fopen('file.txt'); %// open file
x = textscan(fid, '%s', 'delimiter', '\n'); %// or '\r'. Read each line into a cell
fclose(fid); %// close file
x = x{1}; %// each cell of x contains a line of the file
ind = ~cellfun(@isempty, regexp(x, '=\s[\d\.]+$')); %// desired lines: space, numbers, end
x = x(ind); %// keep only those lines

实际参数名称要复杂得多,如位置舵UPR或压力缸LWR。上面的代码还能用吗?我编辑了我的答案。对于该输入A=1234 B=1353.335 C=D=1压力_气缸_LWR=8位置_方向舵_UPR=p1=3,它返回1234,1.3533e+003,1,8,3