检查单元格中是否存在字符串 MATLAB
checking existence of string in a cell MATLAB
我有一个数据如下:
这是来自串口的采样数据顺序:
% date:2016-08-05, time:10:05:23, t1:82.55,h1:85.60,t2:62.55,h2:65.60,
% date:2016-08-05, time:10:05:24, p1:20,p2:35,
% date:2016-08-05, time:10:05:25, p1:35,p2:21,
% date:2016-08-05, time:10:05:26, t1:45,h1:65.60,t2:75.55,h2:65.60,
rdstr='date:2016-08-05, time:10:05:23, t1:82.55,h1:85.60,t2:62.55,h2:65.60,'
现在,我想将数据获取到矩阵 var1 和 var2。
var1= [datetime t1 t2;
datetime t1 t2]...
var2= [datetime p1 p2;
datetime p1 p2]...
注意:readstr是接收到的串口数据,一次读取一行。
var1 日期时间必须在其特定的采样时间。
由于我没有完整的文件,我将使用您提供的数据片段并创建一个元胞数组(而不是 txt 文件),我们将逐行阅读.
LINES={'date:2016-08-05, time:10:05:23, t1:82.55,h1:85.60,t2:62.55,h2:65.60';
'date:2016-08-05, time:10:05:24, p1:20,p2:35';
'date:2016-08-05, time:10:05:25, p1:35,p2:21';
'date:2016-08-05, time:10:05:26, t1:45,h1:65.60,t2:75.55,h2:65.60'};
现在我们将var1
和var2
初始化为空变量:
var1=[];
var2=[];
现在我们使用 for 循环逐行(即逐行)读取元胞数组 LINES
(即您的文件)。然后我们将使用 strfind()
检查是否在我们正在检查的行中找到给定的字符串(t1
或 p1
)。最后,由于您的数据是逗号分隔的,我们将使用 strsplit()
和逗号分隔符来填充 var1
和 var2
:
for i=1:size(LINES,1)
if strfind(LINES{i},'t1')
var1=[var1 ; strsplit(LINES{i},',')];
elseif strfind(LINES{i},'p1') || strfind(LINES{i},'p2')
var2=[var2 ; strsplit(LINES{i},',')];
else
fprintf('t1/p1/p2 not found in i-th cell.\n');
end
end
变量 var1
和 var2
将具有以下形式(分别)
最后,如果你想去掉 var1
和 var2
中的 date
、time
、p1
(等等)字符串:
var1=cellfun(@(x) x(strfind(x,':')+1:end),var1,'UniformOutput',false);
var2=cellfun(@(x) x(strfind(x,':')+1:end),var2,'UniformOutput',false);
和 var1
和 var2
将具有以下形式(分别):
如果您不需要 var1
的 h1
和 h2
值,您可以通过以下方式删除此类列:
var1(:,[4 6])=[];
更新: 文件版本。
% open txt file
fID=fopen('data.txt');
% init var1 and var2
var1=[];
var2=[];
% fetch 1st line
tline = fgets(fID);
while ischar(tline)
% remove leading '% ', remove newline return and the last comma
rdstr=tline(3:end-2);
% same as above
if strfind(rdstr,'t1')
var1=[var1 ; strsplit(rdstr,',')];
elseif strfind(rdstr,'p1') || strfind(rdstr,'p2')
var2=[var2 ; strsplit(rdstr,',')];
else
fprintf('t1/p1/p2 not found in i-th cell.\n');
end
% fetch new line
tline = fgets(fID);
end
fclose(fID);
其中 data.txt
与您的数据片段具有相同的结构,var1
和 var2
具有前两张图中显示的结构。如果你想删除字符串 date
, time
等等你需要像上面那样使用 cellfun()
.
我有一个数据如下: 这是来自串口的采样数据顺序:
% date:2016-08-05, time:10:05:23, t1:82.55,h1:85.60,t2:62.55,h2:65.60,
% date:2016-08-05, time:10:05:24, p1:20,p2:35,
% date:2016-08-05, time:10:05:25, p1:35,p2:21,
% date:2016-08-05, time:10:05:26, t1:45,h1:65.60,t2:75.55,h2:65.60,
rdstr='date:2016-08-05, time:10:05:23, t1:82.55,h1:85.60,t2:62.55,h2:65.60,'
现在,我想将数据获取到矩阵 var1 和 var2。
var1= [datetime t1 t2;
datetime t1 t2]...
var2= [datetime p1 p2;
datetime p1 p2]...
注意:readstr是接收到的串口数据,一次读取一行。 var1 日期时间必须在其特定的采样时间。
由于我没有完整的文件,我将使用您提供的数据片段并创建一个元胞数组(而不是 txt 文件),我们将逐行阅读.
LINES={'date:2016-08-05, time:10:05:23, t1:82.55,h1:85.60,t2:62.55,h2:65.60';
'date:2016-08-05, time:10:05:24, p1:20,p2:35';
'date:2016-08-05, time:10:05:25, p1:35,p2:21';
'date:2016-08-05, time:10:05:26, t1:45,h1:65.60,t2:75.55,h2:65.60'};
现在我们将var1
和var2
初始化为空变量:
var1=[];
var2=[];
现在我们使用 for 循环逐行(即逐行)读取元胞数组 LINES
(即您的文件)。然后我们将使用 strfind()
检查是否在我们正在检查的行中找到给定的字符串(t1
或 p1
)。最后,由于您的数据是逗号分隔的,我们将使用 strsplit()
和逗号分隔符来填充 var1
和 var2
:
for i=1:size(LINES,1)
if strfind(LINES{i},'t1')
var1=[var1 ; strsplit(LINES{i},',')];
elseif strfind(LINES{i},'p1') || strfind(LINES{i},'p2')
var2=[var2 ; strsplit(LINES{i},',')];
else
fprintf('t1/p1/p2 not found in i-th cell.\n');
end
end
变量 var1
和 var2
将具有以下形式(分别)
最后,如果你想去掉 var1
和 var2
中的 date
、time
、p1
(等等)字符串:
var1=cellfun(@(x) x(strfind(x,':')+1:end),var1,'UniformOutput',false);
var2=cellfun(@(x) x(strfind(x,':')+1:end),var2,'UniformOutput',false);
和 var1
和 var2
将具有以下形式(分别):
如果您不需要 var1
的 h1
和 h2
值,您可以通过以下方式删除此类列:
var1(:,[4 6])=[];
更新: 文件版本。
% open txt file
fID=fopen('data.txt');
% init var1 and var2
var1=[];
var2=[];
% fetch 1st line
tline = fgets(fID);
while ischar(tline)
% remove leading '% ', remove newline return and the last comma
rdstr=tline(3:end-2);
% same as above
if strfind(rdstr,'t1')
var1=[var1 ; strsplit(rdstr,',')];
elseif strfind(rdstr,'p1') || strfind(rdstr,'p2')
var2=[var2 ; strsplit(rdstr,',')];
else
fprintf('t1/p1/p2 not found in i-th cell.\n');
end
% fetch new line
tline = fgets(fID);
end
fclose(fID);
其中 data.txt
与您的数据片段具有相同的结构,var1
和 var2
具有前两张图中显示的结构。如果你想删除字符串 date
, time
等等你需要像上面那样使用 cellfun()
.