MATLAB Answers

At every nth line read n lines together

5 ビュー (過去 30 日間)
Shivik Garg
Shivik Garg 2016 年 7 月 14 日
コメント済み: Shivik Garg 2016 年 7 月 15 日
time,n0v_soma,n1v_soma,n2v_soma,n3v_dend
0,-70,-70,-66.5,-66.5
0.027,-69.9703,-69.9794,-66.4966,-66.4966
0.054,-69.9685,-69.9533,-66.4933,-66.4933
0.081,-69.9283,-69.9322,-66.49,-66.4899
0.108,-69.9588,-69.9385,-66.4866,-66.4866
0.135,-69.9422,-69.8965,-66.4833,-66.4833
0.162,-69.9058,-69.8943,-66.48,-66.48
0.189,-69.8465,-69.8618,-66.4767,-66.4766
0.216,-69.8505,-69.8258,-66.4734,-66.4733
0.243,-69.7855,-69.8011,-66.4701,-66.47
0.27,-69.7913,-69.7594,-66.4668,-66.4667
0.297,-69.7228,-69.7291,-66.4636,-66.4634
0.324,-69.6841,-69.7006,-66.4603,-66.4601
0.351,-69.6907,-69.7157,-66.4571,-66.4569
0.378,-69.6584,-69.7295,-66.4538,-66.4536
0.405,-69.5766,-69.7279,-66.4506,-66.4503
0.432,-69.5668,-69.6756,-66.4474,-66.447
0.459,-69.5396,-69.6777,-66.4442,-66.4437
0.486,-69.511,-69.6717,-66.441,-66.4404
0.513,-69.4808,-69.6523,-66.4378,-66.4371
0.54,-69.4632,-69.6325,-66.4346,-66.4339
0.567,-69.4605,-69.6169,-66.4314,-66.4306
0.594,-69.4398,-69.6346,-66.4282,-66.4273
0.621,-69.4638,-69.6245,-66.4251,-66.424
0.648,-69.4429,-69.5968,-66.4219,-66.4207
0.675,-69.4134,-69.5639,-66.4187,-66.4174
0.702,-69.3973,-69.5655,-66.4156,-66.4141
0.729,-69.3973,-69.5668,-66.4125,-66.4108
0.756,-69.3611,-69.6189,-66.4093,-66.4075
My file looks something like this. I want to jump to every 10th line in the file and take that line and following 2 lines and then jump to the 10th line and do so forth and so on E.g The output should be like this
0.216,-69.8505,-69.8258,-66.4734,-66.4733
0.243,-69.7855,-69.8011,-66.4701,-66.47
0.27,-69.7913,-69.7594,-66.4668,-66.4667
0.486,-69.511,-69.6717,-66.441,-66.4404
0.513,-69.4808,-69.6523,-66.4378,-66.4371
0.54,-69.4632,-69.6325,-66.4346,-66.4339
I don't want to read by looping

  0 件のコメント

サインイン to comment.

採用された回答

Walter Roberson
Walter Roberson 2016 年 7 月 14 日
per_line = 5;
every_nth_line = 10;
read_in_a_row = 3;
fmt = [repmat('%*f', 1, per_line*(every_nth_line-read_in_a_row)), repmat('%f', 1, per_line*read_in_a_row)];
fid = fopen('YourFile.txt', 'rt');
datacell = textscan(fid, fmt, 'delimiter', ',\n', 'HeaderLines', read_in_a_row-1, 'CollectOutput', 1);
fclose(fid);
C = reshape(datacell{1}.', per_line, []).';
With the data you posted, the result would be
0.216 -69.8505 -69.8258 -66.4734 -66.4733
0.243 -69.7855 -69.8011 -66.4701 -66.47
0.27 -69.7913 -69.7594 -66.4668 -66.4667
0.486 -69.511 -69.6717 -66.441 -66.4404
0.513 -69.4808 -69.6523 -66.4378 -66.4371
0.54 -69.4632 -69.6325 -66.4346 -66.4339
0.756 -69.3611 -69.6189 -66.4093 -66.4075
NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN
The NaN are from the missing two lines after the 30th line that starts with 0.756, which you omitted from your output

  1 件のコメント

Shivik Garg
Shivik Garg 2016 年 7 月 15 日
Thank you Walter for your help. This code works.

サインイン to comment.

その他の回答 (2 件)

Azzi Abdelmalek
Azzi Abdelmalek 2016 年 7 月 14 日
You can't do it without a for loop unless you read all the file, then select the lines you want

  0 件のコメント

サインイン to comment.


Shameer Parmar
Shameer Parmar 2016 年 7 月 14 日
Hello Shivik,
Here is the Logic..
let us consider you have abc.txt file which is having these data.. So apply following logic and you will get the expected results.. Make sure that the abc.txt file is present in current directory of your working folder..
Data = textread('abc.txt', '%s', 'delimiter', '');
countNew = 1;
for count = 10:10:length(Data)
NewData(countNew,1) = Data(count);
if count+1 <= length(Data)
NewData(countNew+1,1) = Data(count+1);
end
if count+2 <= length(Data)
NewData(countNew+2,1) = Data(count+2);
end
countNew = countNew+3;
end
then type "NewData" and output will be :
NewData =
'0.216,-69.8505,-69.8258,-66.4734,-66.4733'
'0.243,-69.7855,-69.8011,-66.4701,-66.47'
'0.27,-69.7913,-69.7594,-66.4668,-66.4667'
'0.486,-69.511,-69.6717,-66.441,-66.4404'
'0.513,-69.4808,-69.6523,-66.4378,-66.4371'
'0.54,-69.4632,-69.6325,-66.4346,-66.4339'
'0.756,-69.3611,-69.6189,-66.4093,-66.4075'

  0 件のコメント

サインイン to comment.

サインイン してこの質問に回答します。

タグ


Translated by