参考:https://ww2.mathworks.cn/help/matlab/ref/fprintf.html?searchHighlight=fprintf&s_tid=doc_srchtitle#btf98f7
将数据写入文本文件
说明
示例
输出字面文本和数组值
将多个数值和字面文本输出到屏幕。
A1 = [9.9, 9900];
A2 = [8.8, 7.7 ; ...
8800, 7700];
formatSpec = 'X is %4.2f meters or %8.3f mm\n';
fprintf(formatSpec,A1,A2)
X is 9.90 meters or 9900.000 mm X is 8.80 meters or 8800.000 mm X is 7.70 meters or 7700.000 mm
formatSpec 输入中的 %4.2f 指定输出中每行的第一个值为浮点数,字段宽度为四位数,包括小数点后的两位数。formatSpec 输入中的 %8.3f 指定输出中每行的第二个值为浮点数,字段宽度为八位数,包括小数点后的三位数。\n 为新起一行的控制字符。
将双精度值输出为整数
显式将包含分式的双精度值转换为整数值。
a = [1.02 3.04 5.06];
fprintf('%d\n',round(a));
1 3 5
formatSpec 输入中的 %d 将向量 round(a) 中的每个值作为有符号整数输出。\n 为新起一行的控制字符。
将表格数据写入文本文件
将指数函数的短表写入到名为 exp.txt 的文本文件。
x = 0:.1:1;
A = [x; exp(x)];
fileID = fopen('exp.txt','w');
fprintf(fileID,'%6s %12s\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\n',A);
fclose(fileID);
第一个对 fprintf 的调用输出标题文本 x 和 exp(x),第二个调用输出变量 A 的值。
如果打算使用 Microsoft® 记事本读取文件,请使用 '\r\n' 而不是 '\n' 移到新行。例如,将对 fprintf 的调用替换为下列项:
fprintf(fileID,'%6s %12s\r\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\r\n',A);
MATLAB® 导入函数、所有 UNIX® 应用程序以及 Microsoft Word 和写字板都将 '\n' 识别为换行指示符。
通过 type 命令查看文件的内容。
type exp.txt
x exp(x) 0.00 1.00000000 0.10 1.10517092 0.20 1.22140276 0.30 1.34985881 0.40 1.49182470 0.50 1.64872127 0.60 1.82211880 0.70 2.01375271 0.80 2.22554093 0.90 2.45960311 1.00 2.71828183
获取写入文件的字节数
将数据写入文件并返回所写入的字节数。
将数据数组 A 写入文件并获取 fprintf 所写入的字节数。
A = magic(4);
fileID = fopen('myfile.txt','w');
nbytes = fprintf(fileID,'%5d %5d %5d %5d\n',A)
nbytes = 96
fprintf 函数向文件中写入了 96 个字节。
关闭文件。
fclose(fileID);
通过 type 命令查看文件的内容。
type('myfile.txt')
16 5 9 4
2 11 7 14
3 10 6 15
13 8 12 1
在命令行窗口中显示超链接
在屏幕上显示超链接(MathWorks 公司网站)。
url = 'https://www.mathworks.com';
sitename = 'The MathWorks Web Site';
fprintf('<a href = "%s">%s</a>\n',url,sitename)
formatSpec 输入中的 %s 指示变量 url 和 sitename 的值应作为文本输出。
输入参数
输出参数
提示
-
读取函数
sscanf和fscanf的格式设定符不同于写入函数sprintf和fprintf的格式。读取函数不支持精度字段。宽度字段在写入函数中指定最小值,但在读取函数中指定最大值。
参考
[1] Kernighan, B. W., and D. M. Ritchie, The C Programming Language, Second Edition, Prentice-Hall, Inc., 1988.
[2] ANSI specification X3.159-1989: “Programming Language C,” ANSI, 1430 Broadway, New York, NY 10018.
扩展功能
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
-
参数
formatSpec必须是常量。 -
在
formatSpec中,十六进制数必须在 [0 7F] 范围内,八进制数必须在 [0 177] 范围内。 -
如果
fileID具有常量值1或2且不能进行外部调用,代码生成器将生成 Cprintf调用。当外部调用被禁用或在parfor循环内调用fprintf时,不能进行外部调用。 -
在以下情况下,生成的代码中
fprintf的行为与 C 编译器的行为一致,而不是与 MATLAB 的行为一致:-
格式设定符具有一个对应的 C 格式设定符,例如
%e或%E。 -
fprintf调用在parfor循环内。 -
外部调用被禁用。
-
-
不支持以下选项和功能:
-
用于对输入值进行重新排序的
n$位置标识符。 -
打印数组。
-
使用子类型将浮点数打印为八进制、十进制或十六进制值。
-
-
当您使用格式设定符
%s调用fprintf时,不能在输入字符向量的中间放置空字符。要写入空字符,请使用fprintf(fid, '%c', char(0))。 -
输入参数的类型必须与其格式类型匹配。例如,如果
n是双精度,则代码生成不允许使用以下代码:str = sprintf('%d',n)要进行代码生成,请先将
n转换为有符号整数类型,如int8。str = sprintf('%d',int8(n)) -
当您使用整数格式设定符调用
fprintf时,整数参数的类型必须能够被目标硬件表示为本机 C 类型。例如,如果您调用fprintf('%d', int64(n)),目标硬件必须具有支持 64 位整数的本机 C 类型。
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
-
此函数接受 GPU 数组,但不在 GPU 上运行。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
使用 Parallel Computing Toolbox™ 在群集的组合内存中对大型数组进行分区。