我有一个名为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};
答案 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