How do I print a % character into a file

14 ビュー (過去 30 日間)
Gavin
Gavin 2024 年 9 月 13 日
コメント済み: Gavin 2024 年 9 月 23 日
I am creating an app in App Designer, creating an output file that will be an .m file for another user to run later.
I'd like to put a comment header at the start of this file but I can't double excape the % character
app.SessionFile = fopen(app.SessionFileName,'at');
str = sprintf("%% Parameters: %c%u...",v1,v2...); % Put required string into str - works
str is now "% Paramters: ...." but it won't go out to the file with
fprintf(app.SessionFile,str); % Nothing gets printed, comment gets stripped out!
(0 chars printed)
Also not working
str = sprintf("%%% Parameters:
str = sprintf(" %% Parameters:
Seems like if I have a string I want to put in a text file MatLab shouldn't mess with it.
Also: is 'at' the same as 'wt' ? seems like it always appends anyway with fprint.
  3 件のコメント
Gavin
Gavin 2024 年 9 月 14 日
OK ''wt' is same as 'at' on first open otherwise a appends w restarts... Stupid question!
is printing direct to the filw with fprinf(MyFile,"%% ") the only way to do it?
Thus second fprintf(MyFile,str); is needed to add the rest of the string.
Walter Roberson
Walter Roberson 2024 年 9 月 14 日
fprintf(MyFile, "%s", "%")
or
fwrite(MyFile, "%s")
Again I caution that neither version of those will add a newline.

サインインしてコメントする。

採用された回答

Voss
Voss 2024 年 9 月 13 日
fprintf(app.SessionFile,"%s",str);
  1 件のコメント
Voss
Voss 2024 年 9 月 13 日
Or skip using sprintf if you don't need str for anything else and fprintf v1, v2, etc., directly:
fprintf(app.SessionFile,"%% Parameters: %c%u...",v1,v2...);

サインインしてコメントする。

その他の回答 (2 件)

Steven Lord
Steven Lord 2024 年 9 月 13 日
If you don't need str inside your code other than to write it to the file, rather than creating it just write directly to the file.
app.SessionFile = fopen(app.SessionFileName,'at');
fprintf(app.SessionFile,"%% Parameters: %c%u...",v1,v2...);

Walter Roberson
Walter Roberson 2024 年 9 月 13 日
Either
fprintf(app.SessionFile,"%s",str);
or
fwrite(app.SessionFile, str);
Note: your str does not appear to include newline. Neither of the above possibilities will insert a newline. The easiest way to include a newline is
fprintf(app.SessionFile,"%s\n",str);
  4 件のコメント
Walter Roberson
Walter Roberson 2024 年 9 月 16 日
編集済み: Walter Roberson 2024 年 9 月 16 日
fprintf(MyFile,str) treats str as the format, an interprets it, scanning it looking for % formats.
fprintf(MyFile, "%s", str) treats %s as the format, and treats str as the text to be inserted literally.
There is no special documentation for fprintf(MyFile,str) because it is just treated as an instance of fprintf(fileID,formatSpec,A1,...,An) with str as the formatSpec and with no A1,...,An
If you write an unterminated line to a file and close the file, then the line will be inserted into the file, and the file will just end there; the line can be pulled out of the file normally. It is possible some common DOS utilities might not show the trailing line.
Gavin
Gavin 2024 年 9 月 23 日
Great answer but I chose the simplest one that works.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeEnvironment and Settings についてさらに検索

製品


リリース

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by