读取每第n行数据,条件后读取所有行

时间:2018-08-03 17:23:18

标签: matlab for-loop if-statement conditional-statements

我有一个名为Myfile.txt的文件,其中包含标题和三行数据:

Header Row1 Row2 Row3

    5.10 10 15
    5.20 20 25
    5.30 30 35
    5.40 40 45
    5.50 50 55
    5.60 60 65
    5.70 70 75
    5.80 80 85
    5.90 90 95
    5.95 10 20
    6.00 25 30
    6.05 35 40

我想每隔三行读取第一列就增加.1,然后将所有行递增到.05,所以我的输出看起来像:

    5.30 30 35
    5.60 60 65
    5.90 90 95
    5.95 10 20
    6.00 25 30
    6.05 35 40

我有以下代码,但我不知道如何实现该条件,这样做可以得到一些帮助吗?

per_line = 3;
every_nth_line = 3;
fmt = [repmat('%*f',1,per_line*(every_nth_line-1)), repmat('%f',1,per_line)];
fid = fopen('Myfile.txt','rt');
datacell = textscan(fid,fmt,'delimiter','\n','HeaderLines',1,'CollectOutput',1);
fclose(fid);
C=datacell{1};

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码:

fileID = fopen('Myfile.txt');
mydata = textscan(fileID,'%f%f%f','HeaderLines',2);
findx = (find(abs(diff([mydata{1}(1)-0.1;mydata{1}])-0.1000)<0.0001));
sindx = (find(abs(diff(mydata{1})-0.05)<0.0001))+1;
alldata = [mydata{:}];
C= [alldata(findx(3:3:end),:);alldata(sindx,:)];
fclose(fileID);

diff用于确定第一列中条目之间的差异。 abs用于确定相差不大的浮点数之间的相等性,find用于返回其索引。

C 包含:

5.3000   30.0000   35.0000
5.6000   60.0000   65.0000
5.9000   90.0000   95.0000
5.9500   10.0000   20.0000
6.0000   25.0000   30.0000
6.0500   35.0000   40.0000