Read m file with fgets / fgetl

4 visualizaciones (últimos 30 días)
Clément P
Clément P el 19 de Abr. de 2016
Editada: Stephen23 el 21 de Abr. de 2016
Hi,
I want to read a m file called 'File1.m' and write in the same time a 'File2.m'.
My code (simplified for example) is :
Fin = fopen('File1.m','r');
Fout = fopen('File2.m','w');
while feof(Fin) == 0
line = fgets(Fin);
if regexp(line,'text')
fprintf(Fout,' modified text ');
else
fprintf(Fout,line);
end
end
It works perfectly EXCEPT that fgets is not reading comments in File1 (comments indicated with '%').
Do you know a way to read them? It is actually important comments.
Thanks, Clément
  3 comentarios
Clément P
Clément P el 19 de Abr. de 2016
Editada: Clément P el 19 de Abr. de 2016
I think that fgets takes into account the '\n', but fgetl does not. Maybe it is another symptom, but I don't understand why everything is write perfectly except comments. Or maybe it comes from sprintf?
edit : I checked, fgets reads all characters, including comments. I think it comes from fprintf , as the '%' is used to print variables. Do you have an idea how to overpass this?
Clément P
Clément P el 19 de Abr. de 2016
Actually it works with fwrite ;)

Iniciar sesión para comentar.

Respuesta aceptada

Stephen23
Stephen23 el 19 de Abr. de 2016
Editada: Stephen23 el 21 de Abr. de 2016
Solution Use fgetl and this:
fprintf(Fout,'%s\n',line);
Explanation there is a very large difference between these:
fprintf(fid,'%s\n',text) % correct
fprintf(fid,text) % what you are doing
because of how escaped characters get handled. Characters that need escaping include %, so when you provide it simply (as you are doing) it does not get interpreted as a simple character, but instead is a special active character. The first line shows the correct solution for your task, with a format string and your text as an argument. Read the fprintf docs for more info on this, or this excellent explanation:
  1 comentario
Clément P
Clément P el 20 de Abr. de 2016
Thanks a lot for the explanations :D

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Entering Commands en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by