MATLAB Answers

How to skip some strings in a text file

Hey guys,
I want to skip the lines until I reach the two numeric data columns beneath the "lag time(s)" and "g2-1" (it would be the 18th line) and plot them as x,y respectively. So basically I want to tell it to ignore first 18 lines while reading file, and after that, in each line put the number in each column in either x or y.
Your help will be appreciated, thanks.

  2 Comments

textscan() with 'HeaderLines', 18
dpb
on 24 Aug 2019
And, if you don't know the headerlines count a prior, calling detectImportOptions will in a case such as the above file, determine it for you.

Sign in to comment.

Tags

Products


Release

R2018b

1 Answer

Answer by Allen
on 24 Aug 2019

If you do not have a set number of header lines, but know the content of the last header line, you can read a portion of the file and perform a text match test to find the last header line. Rewind the scan counter and rescan the entire file using textscan(..., 'HeaderLines',LastHeaderLine). Example provided below.
% Open file and read first 100 lines as text.
filename = '150 dls.txt';
fid = fopen(filename);
C = textscan(fid,'%s',100,'delimiter','\n');
% Search scanned text for expected match of last header line and get its index value.
index = find(contains(C{1},'lag time(s)'),1);
% Rewind the scanline counter for the fid and read all lines in the file following the last header line.
frewind(fid)
expr = '%f%f'; % Expression format for 2-columns of floating point numbers
delim = ','; % Comma delimiter used in example but may need to change to meet your data
output = cell2mat(textscan(fid,expr,'headerlines',index,'delimiter',delim));

  2 Comments

Something close to this should work
fid = fopen(filename);
fgets(fid); %discard leading date
output = cell2mat(textscan(fid, '%f%f', 'delimiter', ',', 'CommentStyle', {'Pseudo Cross Correlation', 'lag time'}) );
fclose(fid)

Sign in to comment.