Filter löschen
Filter löschen

Read m file with fgets / fgetl

3 Ansichten (letzte 30 Tage)
Clément P
Clément P am 19 Apr. 2016
Bearbeitet: Stephen23 am 21 Apr. 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 Kommentare
Clément P
Clément P am 19 Apr. 2016
Bearbeitet: Clément P am 19 Apr. 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 am 19 Apr. 2016
Actually it works with fwrite ;)

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 19 Apr. 2016
Bearbeitet: Stephen23 am 21 Apr. 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 Kommentar
Clément P
Clément P am 20 Apr. 2016
Thanks a lot for the explanations :D

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu File Operations finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by