Edit line in text document
    4 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
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 commentaires
Réponse acceptée
  Cedric
      
      
 le 10 Avr 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.
Plus de réponses (1)
  PT
      
 le 10 Avr 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 commentaires
Voir également
Catégories
				En savoir plus sur Low-Level File I/O dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


