# Reading a massive file but skipping several lines / rows at a fixed interval

4 views (last 30 days)
L'O.G. on 29 Mar 2022
Commented: KSSV on 29 Mar 2022
What is the most efficient way to read / analyze rows 1-1990 of an array, then skip 9 lines, then read rows 2000-3990, skip 9 rows, read rows 4000-5990, and so on to the end of the array? Is there a way to vectorize that?
Stephen23 on 29 Mar 2022
Use a loop. Inside the loop you can easily tell MATLAB which part of the file to read, e.g.:
• TEXTSCAN lets you specify how many times the format is applied and how many header lines.
• READTABLE et al let you specify the data location, header location, etc.
What is so special about the rows you wan to ignore: are they intermediate headers or just data you don't want? The answer to that question will change how you can approach this task.

KSSV on 29 Mar 2022
Edited: KSSV on 29 Mar 2022
id = 1:9 ; % line numbers
V = 1990:2000:9990 ; % give the end wisely
idx = id'+V ; % make indices
idx = idx(:) ; % make indices a column
% Let A be your array
A(idx) = [] ; % remove the lines using the indices
##### 2 CommentsShowHide 1 older comment
KSSV on 29 Mar 2022
Yes, if it is an array use A(idx), if it is a matrix, A(idx,:). I have considered it as an array. :)

Arif Hoq on 29 Mar 2022
try this loop:
A=(1:9990)';　% making an array
idx=2000; % taken value from 2000
count=(size(A,1)+10)/idx;
first_index=A(1:1990); % first index value to make the loop simple
C=cell(count,1);
for i=2:count
C{i}=A(idx*(i-1):(idx*i)-10);
end
mat=[C{:}]

R2021b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!