Edit line in text document
2 views (last 30 days)
Show older comments
Is there a way to change one line in a text document? My impression is that with fopen and fprintf there is no way to just edit the contents a line, leaving the rest of the doc unchanged. I tried the following:
fid = fopen(doc,'r+);
while true
str = fgetl(fid);
if feof(fid) % break out of loop and end of doc
break
end
if strcmp(str,checkstr)
newstr = [str 'abc'];
fprintf(fid,'%s',newstr);
end
end
fclose(fid);
But I cannot get this to work (if I run the code, the document is not changed). I tried to play with additional tags like \r or \n, but I couldn't get it to work. Is there something I am missing, or is it generally not possible (with reasonable effort) to just edit a text file, in which case I guess I will have to create a copy of the full file?
0 Comments
Accepted Answer
Cedric
on 10 Apr 2013
If you want to change part of a line based on a match (checkstr), a good way to achieve this is to use regular expressions, e.g.
buffer = fileread('inFile.txt') ;
buffer = regexprep(buffer, 'I hate regexp', 'I love regexp') ;
fid = fopen('outFile.txt', 'w') ;
fwrite(fid, buffer) ;
fclose(fid) ;
If you tell me the pattern that you are matching and the replacement, I can help you building a pattern for the regexp if it is more elaborate that basic alpha-numeric characters.
More Answers (1)
PT
on 10 Apr 2013
Two issues:
1. As the help of fopen states, you must have a fseek between fgetl and fprintf.
2. You are changing the overall file size by inserting. It might be better if you save to a temp file and replace the original file with the temp file at the end of your operation.
%{
File content:
good
morning
to you
%}
checkstr = 'morning';
fin = fopen('test.txt','r');
fout = fopen('testout.txt','w');
while ~feof(fin);
str = fgetl(fin);
if strcmp(str,checkstr)
str = [str 'abc'];
end
fprintf(fout, '%s\n', str);
end
fclose(fin);
fclose(fout);
0 Comments
See Also
Categories
Find more on Environment and Settings in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!