【问题标题】:Read every nth line of data, Read all lines after condition读取每第 n 行数据,读取条件后的所有行
【发布时间】:2019-01-11 15:08:00
【问题描述】:

我有一个名为 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

我想每 3 行读取一次,将第一列增加 0.1,然后将所有行增加为 0.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};

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • @coder741 欢迎您,请接受答案,因为它解决了您的问题 :) 请参阅here 怎么做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多