检查单元格MATLAB中字符串的存在

时间:2016-03-13 11:05:15

标签: matlab datetime serial-port

我的数据如下: 这是来自串口的采样数据顺序:

% 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 datetime必须是他们特定的采样时间。

1 个答案:

答案 0 :(得分:0)

由于我没有整个文件,我将使用您提供的数据片段,我将创建一个单元格数组(而不是txt文件),我们将逐行读取。< / p>

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'};

现在我们将var1var2初始化为空变量:

var1=[];
var2=[];

现在我们使用for循环逐行(即逐行)读取单元格数组LINES(即您的文件)。然后,如果在我们正在检查的行中找到给定字符串(strfind()t1),我们将使用p1进行检查。最后,由于您的数据以逗号分隔,我们将使用带有逗号分隔符的strsplit()来填充var1var2

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

变量var1var2将分别具有形式 enter image description here enter image description here

最后,如果您要删除datetime中的p1var1var2(等等)字符串:< / p>

var1=cellfun(@(x) x(strfind(x,':')+1:end),var1,'UniformOutput',false);
var2=cellfun(@(x) x(strfind(x,':')+1:end),var2,'UniformOutput',false);

并且var1var2将分别具有以下形式: enter image description here enter image description here

如果h1不需要h2var1值,您可以通过以下方式删除此类列:

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与您的数据代码段具有相同的结构,var1var2具有前几个图中显示的结构。如果您要删除字符串datetime等,则需要使用上述cellfun()