replacing multiple lines with multiple lines in ascii file
8 次查看(过去 30 天)
显示 更早的评论
Hi
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+');
while ~feof(fin)
s = fgetl(fin);
s = strrep(s, 'old string', 'newstring');
fprintf(fout,'%s\n',s);
end
fclose(fin);
fclose(fout);
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.
Regards Brian.
0 个评论
采纳的回答
Jarrod Rivituso
2011-5-9
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')
fprintf(fileID,'%s',newFileData);
fclose(fileID)
Note that char(10) and char(13) are just line breaks and carriage returns.
2 个评论
Jarrod Rivituso
2011-5-9
Two thoughts
- strfind is helpful for finding strings. though, you may find even more use if you just again read the entire files in and then split them using regexp...
>> str = 'this is something, which is separated, by some commas'
>> regexp(str,',','split')
- When debugging stuff like this, i find it very useful to convert things to numeric and display their ascii values on the command prompt from time to time
>> str = sprintf('this is something \n which is separated \r\n by carriage returns and new lines')
>> double(str)
更多回答(2 个)
Ken Atwell
2011-5-11
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) ];
end
for i = 2:3
rep_str = [ rep_str sprintf('New Line %d\n', i) ];
end
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.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Text Data Preparation 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!