从矩阵中删除行并按Shift

时间:2018-12-06 23:28:57

标签: matlab

我在网上找到了一些信息,但不足以帮助我解决此问题。我正在遍历多个文件并从文件中提取数据。然后将其存储在名为extract的数组中。问题是我在for循环中这样做,并正在寻找某个字符串。如果该字符串不存在,它仍会遍历循环并增加我的计数器。因此,如果我遍历两个文件,而我要查找的字符串不在那儿,但是在第三个文件在那儿,那么我写的第一行是第3行而不是第1行。我还附加了一个图像前几个数据元素。我希望能够删除具有[]的行,然后将其移至下方。这是代码,感谢您的宝贵时间。如果还有什么我可以提供的,请告诉我!

        function this = extractData(this, xAxis, yAxis)
        s = dir('*.txt'); % Gather all text files

        for i=1:length(s) % Loop through and gather data until last element of strcuct
            j = 1;
            fid = s(i).name; % Open file in read-only mode
            this = this.readDataFromFile(fid);
            if ~contains(this.metaData(:,1), xAxis)
                continue;
            end
            x = this.metaData(find(contains(this.metaData(:,1), xAxis)),3);
            this.extract{i,j} = x;
            j = j+1;
            y = this.metaData(find(contains(this.metaData, yAxis)),3); %#ok<*FNDSB>
            this.extract(i,j) = y;
        end %for

        xAxis = strrep(xAxis, ' ', '_'); % For file formatting
        yAxis = strrep(yAxis, ' ', '_');
        this.colLabels = {xAxis, yAxis};

        % Write it all to a file 
       fileName = 'myTestFile.txt'
       filepath = cd;
       file = fullfile(filepath, fileName);
       fid = fopen(file, 'w');
       if fid == -1
           error ('Cannot open file for writing: %s', file);
       end

       % File must denote where meta-data and data begin
       fprintf(fid, '%-72s', '=============================meta data============================='); 
       fprintf(fid, '\n');
       for row=1:size(this.extract,1)
           for col=1:size(this.extract,2)
                fprintf(fid, '%s', this.extract{row,col});
           end
           fprintf(fid, '\n');
       end %for
        fclose(fid);               
    end %extractData            

enter image description here

1 个答案:

答案 0 :(得分:1)

您是否正在寻找这样的循环逻辑?

k = 1;
for i=1:length(s)
    fid = s(i).name;
    %...
    if %...
        continue;
    end
    this.extract{k,j} = %...
    k = k + 1;
end

在这里,我们只是将指示要读取哪个文件的索引i与指示要写入输出矩阵中哪一行的索引k分离。