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.

 Réponse acceptée

Stephen23
Stephen23 le 21 Août 2018
Modifié(e) : Stephen23 le 21 Août 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 commentaires

Theodor Al Saify
Theodor Al Saify le 21 Août 2018
nothing has changed when i run the code , Do i need to modify anything in it ?
Stephen23
Stephen23 le 21 Août 2018
Modifié(e) : Stephen23 le 21 Août 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.
Theodor Al Saify
Theodor Al Saify le 21 Août 2018
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 ?
Stephen23
Stephen23 le 21 Août 2018
Modifié(e) : Stephen23 le 21 Août 2018
Change the first line to this:
fmt = sprintf('\\s*%c\\s*=\\s*([-+]?\\d+\\.\\d+)\\s*mm,','XYZ')
^^^^^ optional +/- sign
Theodor Al Saify
Theodor Al Saify le 21 Août 2018
Thank you it work perfectly . :D

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Characters and Strings 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