How can i replace a line form a text ?

I have the following text file i want to replace all the line that contains this pattern X = 259.557 mm, Y = 563.173 mm, Z = -104.284 mm,
with a new line that contains the existing numbers added by a certain value.

 Accepted Answer

Stephen23
Stephen23 on 21 Aug 2018
Edited: Stephen23 on 21 Aug 2018
You can easily match those lines using a regular expression. Something like this:
fmt = sprintf('\\s*%c\\s*=\\s*(\\d+\\.\\d+)\\s*mm,','XYZ')
fmt = sprintf('^%s\\s*$',fmt)
str = fileread('values.txt');
spl = regexp(str,'[\n\r]+','split');
tmp = regexp(spl,fmt,'tokens','once');
idx = find(~cellfun('isempty',tmp));
for k = reshape(idx,1,[])
vec = str2double(tmp{k}) + 2; % add two as example data manipulation.
spl{k} = sprintf(' X = %.3f, Y = %.3f, Z = %.3f,',vec);
end
fid = fopen('newfile.txt','wt');
fprintf(fid,'%s\n',spl{:});
fclose(fid);

5 Comments

nothing has changed when i run the code , Do i need to modify anything in it ?
Stephen23
Stephen23 on 21 Aug 2018
Edited: Stephen23 on 21 Aug 2018
It creates a new file called 'newfile.txt' Check that file and you will see that each X,Y,Z value has increased by two, as the comment describes.
You could overwrite the original file, but I would not recommend doing this until the code has been well tested.
I found that the problem is for the (-) sign sometimes the numbers are negative and won't match the pattern. Do you know how i can fix it ?
Change the first line to this:
fmt = sprintf('\\s*%c\\s*=\\s*([-+]?\\d+\\.\\d+)\\s*mm,','XYZ')
^^^^^ optional +/- sign
Thank you it work perfectly . :D

Sign in to comment.

More Answers (0)

Categories

Community Treasure Hunt

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

Start Hunting!