replacing multiple lines with multiple lines in ascii file
31 views (last 30 days)
I would like to make a routine that can replace multiple lines with other multiple lines in a ascii file. This could for example be to replace 7 lines with 4 lines. I can not do it one line at the time because the single lines of the 7 lines are present other places in the file than in the 7 lines.
For single line replacement I have used
fin = fopen('in.txt','r');
fout = fopen('out.txt', 'w+');
s = fgetl(fin);
s = strrep(s, 'old string', 'newstring');
But I can't figure out an easy way to convert this to handle multiple lines replacement.
Do you have any ideas?
Thanks in advance.
Jarrod Rivituso on 9 May 2011
Can you read the whole file in and then just replace the strings?
wholeFile = fileread('myFile.txt');
newStr = 'This is the replacement for line 2 and 3';
oldStr = ['This is line 2' char(13) char(10) 'This is line 3'];
newFileData = strrep(wholeFile,oldStr,newStr);
fileID = fopen('newFile.txt','w')
Note that char(10) and char(13) are just line breaks and carriage returns.
More Answers (2)
Ken Atwell on 11 May 2011
Have you considered regular expressions? the MATLAB function regexprep would probably do the trick:
old_str = ;
rep_str = ;
for i = 1:5
old_str = [ old_str sprintf('Old Line %d\n', i) ];
for i = 2:3
rep_str = [ rep_str sprintf('New Line %d\n', i) ];
new_str = regexprep(old_str, 'Old Line 2\W+Old Line 3\W+', rep_str);
The '\W+' is a bit of regular expression magic to match one or more whitespace characters, which is why it can span multiple lines.