How to delete lines in a text file?

I have thousands of datafiles with headerlines and then 2 columns of data. For example:
mmmmmm_0001.chi
datatype measurement
units
comment
5.5993205E-01 0.0000000E+00
5.7147706E-01 0.0000000E+00
5.8302206E-01 0.0000000E+00
5.9456706E-01 0.0000000E+00
6.0611206E-01 5.9196600E+02
6.1765701E-01 5.9167889E+02
6.2920201E-01 5.9606128E+02
6.4074701E-01 6.1506769E+02
6.5229201E-01 6.2716541E+02
6.6383702E-01 6.3965259E+02
To import them in another software without errors I need to modify all the files keeping the first 4 rows of headerlines, and deleting only the first 4 lines of data (with intensity = 0). There is a way to do this with MATLAB? I cannot read from line 5 and append the headerlines later because they are changing for each file (...001.chi, ...002.chi and so on). The task is quite easy: I only need to delete an interval of lines (from line x to line y) and save the file, but I could not find any answer on the previous topics.
Edit: see attached file

Réponses (1)

Stephen23
Stephen23 le 4 Juin 2015
Modifié(e) : Stephen23 le 6 Juin 2015
EDIT: now the the OP has actually posted a sample data file.
A very robust way to read is to use textscan, something like this:
% Read file data into MATLAB:
fid = fopen('measur_xknh2%20(1-x)kh_x1_1.txt','rt');
hdr = textscan(fid,'%s',4,'Delimiter','\n','Whitespace','');
dat = cell2mat(textscan(fid,'%f%f'));
fclose(fid);
% Remove rows with zeros in the last column:
dat = dat(dat(:,2)>0,:);
% Save data in a new file:
fid = fopen('newfile.txt','wt');
fprintf(fid,'%s\n',hdr{1}{:});
fprintf(fid,' %.7E %.7E\n',dat.');
fclose(fid);
This code produces a copy of the original file, excluding the rows where the second column had value zero. To process a sequence of files you should read this:

Catégories

En savoir plus sur Data Import and Export dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by