参照https://ww2.mathworks.cn/help/matlab/ref/fprintf.html?s_tid=doc_ta
将数据写入文本文件
fprintf(fileID,formatSpec,A1,...,An)
fprintf(formatSpec,A1,...,An)
nbytes = fprintf(___)
fprintf(
按列顺序将 fileID
,formatSpec
,A1,...,An
)formatSpec
应用于数组 A1,...An
的所有元素,并将数据写入到一个文本文件。fprintf
使用在对 fopen
的调用中指定的编码方案。
fprintf(
设置数据的格式并在屏幕上显示结果。formatSpec
,A1,...,An
)
使用前述语法中的任意输入参数返回 nbytes
= fprintf(___)fprintf
所写入的字节数。
将多个数值和字面文本输出到屏幕。
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);
通过 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('%s\n',url,sitename)
formatSpec
输入中的 %s
指示变量 url
和 sitename
的值应作为文本输出。
fileID
- 文件标识符1
(默认) | 2
| 标量文件标识符,指定为下列值之一:
从 fopen
获取的文件标识符。
1
表示标准输出(屏幕)。
2
表示标准错误。
数据类型: double
formatSpec
- 输出字段的格式输出字段的格式,使用格式化操作符指定。formatSpec
还可以包括普通文本和特殊字符。
formatSpec
可以是用单引号引起来的字符向量,从 R2016b 开始,也可以是字符串标量。
格式化操作符
格式化操作符以百分号 %
开头,以转换字符结尾。转换字符是必需的。您也可以在 %
和转换字符之间指定标识符、标志、字段宽度、精度和子类型操作符。(操作符之间的空格无效,在这里显示空格只是为了便于阅读。)
转换字符
此表显示了要将数值和字符数据格式化为文本的转换字符。
值类型 | 转换 | 详细信息 |
---|---|---|
有符号整数 |
|
以 10 为基数 |
无符号整数 |
|
以 10 为基数 |
|
以 8 为基数(八进制) |
|
|
以 16 为基数(十六进制),小写字母 |
|
|
与 |
|
浮点数 |
|
定点记数法(使用精度操作符指定小数点后的位数。) |
|
指数记数法,例如 |
|
|
与 |
|
|
更紧凑的 |
|
|
更紧凑的 |
|
字符或字符串 |
|
单个字符 |
|
字符向量或字符串数组。输出文本的类型与 |
可选操作符
可选标识符、标志、字段宽度、精度和子类型操作符进一步定义了输出文本的格式。
标识符
处理函数输入参数的顺序。使用语法
,其中 n
$n
代表函数调用中其他输入参数的位置。
示例:('%3$s %2$s %1$s %2$s','A','B','C')
将输入参数 'A'
、'B'
、'C'
输出为:C B A B
。
注意:如果输入参数为数组,则不能使用标识符指定该输入参数中的特定数组元素。
标志
|
左对齐。 |
|
始终为任何数值输出符号字符(+ 或 –)。 |
|
在值之前插入空格。 |
|
在值之前补零以填充字段宽度。 |
|
修改选定的数值转换:
示例: |
字段宽度
要输出的最低字符数。字段宽度运算符可以是数字,也可以是指向输入参数的星号 (*
)。
示例:输入参数 ('%12d',intmax)
等效于 ('%*d', 12, intmax)
。
除非标志另行指定,否则该函数使用空格填充值之前的字段宽度。
精度
对于 |
小数点右侧的位数 |
对于 |
有效位数 |
精度操作符可以是数字,也可以是指向参数的星号 (*
)。
示例:输入参数 ('%6.4f', pi)
等效于 ('%*.*f', 6, 4, pi)
。
如果您为浮点值指定的精度操作符所表示的精度超出输入数值数据类型的精度,则在指定精度内,结果与输入值可能不匹配。结果取决于您的计算机硬件和操作系统。
子类型
可以使用子类型操作符将浮点值显示为八进制、十进制或十六进制值。子类型操作符紧邻转换字符之前。此表显示了可使用子类型的转换。
输入值类型 |
子类型和转换字符 |
输出值类型 |
---|---|---|
浮点数 |
|
双精度十六进制、八进制或十进制值 |
|
单精度十六进制、八进制或十进制值 |
格式化操作符前或后的文本
formatSpec
还可以在百分号 %
前添加其他文本,或者在转换字符后添加其他文本。文本可以为:
要打印的普通文本。
您无法作为普通文本输入的特殊字符。此表显示了如何在 formatSpec
中表示特殊字符。
特殊字符 |
表示形式 |
---|---|
单引号 |
|
百分比字符 |
|
反斜杠 |
|
警报 |
|
退格符 |
|
换页符 |
|
换行符 |
|
回车符 |
|
水平制表符 |
|
垂直制表符 |
|
其 Unicode® 数值可以通过十六进制数 |
示例: |
其 Unicode 数值可以通过八进制数 |
示例: |
使用格式化操作符进行转换时要注意的行为
数值转换仅输出复数的实部。
如果指定不适合数据的转换(例如数值的文本转换),MATLAB 将改写指定的转换并使用 %e
。
示例:'%s'
将 pi
转换为 3.141593e+00
。
如果对整数值应用文本转换(%c
或 %s
),MATLAB 会将对应于有效字符代码的值转换为字符。
示例:'%s'
将 [65 66 67]
转换为 ABC
。
数据类型: char
| string
A1,...,An
- 数值数组或字符数组数值数组或字符数组,指定为标量、向量、矩阵或多维数组。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
nbytes
- 字节数fprintf
所写入的字节数,作为标量返回。在写入文件时,nbytes
由字符编码所决定。向屏幕输出数据时,nbytes
是屏幕上显示字符的个数。
读取函数 sscanf
和 fscanf
的格式设定符不同于写入函数 sprintf
和 fprintf
的格式。读取函数不支持精度字段。宽度字段在写入函数中指定最小值,但在读取函数中指定最大值。