字符串逗号将矩阵分隔成双重分隔矩阵

时间:2017-07-10 09:35:10

标签: matlab matrix

我有一个来自我的COM端口的数据流,我想以下列格式分离它的数据:

t v1 v2 v3 v4 \ n t v1 v2 v3 v4

数据按以下格式逐行进入缓冲区: t,v1,v2,v3,v4 \ n t,v1,v2,v3,v4 \ n t,v1,v2,v3,v4 ....

我已经创建了一些向量来累积来的数据。我在一个小暂停后立即读取端口(模拟原始大代码中的处理时间)。

以下是com端口内容的读取和转换的最小化部分:

            clear all;
    clc;

    v1=zeros(10000,1);v2=zeros(10000,1);v3=zeros(10000,1);v4=zeros(10000,1);
    time=zeros(10000,1);

    comport= serial('COM11', 'BaudRate', 115200);
    comport.InputBufferSize = 50000000;
    flushinput(comport);
    fopen(comport);pause(10);
    tic;dat=[];in=1;
    while(toc<50)
        %             dat=strsplit(fgetl(comport),',');
        while length(dat)~=5
            dat=(strsplit(fgetl(comport),','));
        end

        u8 = fread(comport, comport.BytesAvailable); % uchar, but in double
        ch = char(u8);

        x=string(ch');
        newStr = splitlines(x);
        %             newStr=newStr(1:length(newStr)-1);
        data=zeros(length(newStr),5);
        %         data=[];
        i=1;n=1;r=[];
        while(i<=length(newStr))
            r=str2double(strsplit(newStr(i),','));
            if(length(r)==5)
                data(n,:)= r;
                n=n+1;
            end
            i=i+1;
        end
        data = data(~any(isnan(data), 2), :);
        data=double(data);
        j=1;
        while(j<=length(data))
            time(in)=data(j,1);
            v1(in) = (data(j,2));
            v2(in) =  (data(j,3));
            v3(in)=  (data(j,4));
            v4(in) =  (data(j,5));
            in=in+1;
            j=j+1;
        end
    end
    fclose(comport);
    delete(comport);

每当我尝试运行此代码时,它有时会起作用,但在其他时候,我会收到以下错误:

   Error in freadtry (line 28)
        data(i,:)= str2double(strsplit(newStr(i),','));
        Subscripted assignment dimension mismatch.

你能告诉我为什么这个错误会继续发生吗?

编辑:我找到了错误并修复了它,它与一些“newStr”行的大小有关,这些行的元素少于5个。

1 个答案:

答案 0 :(得分:-1)

我找到了错误并修复了它,它与一些&#34; newStr&#34;的大小有关。行数少于5个元素。 为了解决它,我的循环现在占用每一行并将其保存在(r)中,然后评估它的长度,如果它小于5,它将丢弃该行作为不完整。否则,它会将它添加到最终的矢量中。