maz
maz

Reputation: 3

skip lines in txt file using textscan in matlab

I have a huge .txt file and parts of which I want to parse (using text scan), say I have 10000 line data and a part which starts at line 300, the part also has a header of 10 lines say,how can I skip the first 300 lines(not using header function of text scan of course as I then wont be able to get my actual 10 line header) or is there a way in which I can jump to line 300 and start text scan from there as if 301 line was the first line.

Upvotes: 0

Views: 2708

Answers (1)

houtanb
houtanb

Reputation: 4100

So, assuming your data is generated by the following (since you have not mentioned how it's formatted in your question):

fid = fopen('datafile.txt', 'w');

for i=1:300
    fprintf(fid, 'ignore%d\n', i);
end

for i=301:310
    fprintf(fid, 'header%d\n', i);
end

for i=311:10000
    fprintf(fid, '%d\n', i);
end

fclose(fid);

You can read the data by first using fgetl to advance to the 300th line, then using textscan twice to get the header info and the data. Basically, the thing to remember is that textscan works starting from the place where fid is pointing. So, if it's pointing to the 301st line, it'll start scanning from there. So, here's the code to read the file above, starting from line 301:

fid = fopen('datafile.txt', 'r');

for i=1:300
    fgetl(fid);
end

scannedHeader = textscan(fid, '%s', 10);
scannedData = textscan(fid, '%d');

fclose(fid);

NB: if the data is always the same format, you can use ftell to know where to skip to exactly then use fseek to go to that offset.

Upvotes: 0

Related Questions