fprintf
将数据写入文本文件
说明
fprintf(
按列顺序将 fileID
,formatSpec
,A1,...,An
)formatSpec
应用于数组 A1,...An
的所有元素,并将数据写入到一个文本文件。fprintf
使用在对 fopen
的调用中指定的编码方案。
fprintf(
设置数据的格式并在屏幕上显示结果。formatSpec
,A1,...,An
)
示例
输出字面文本和数组值
将多个数值和字面文本输出到屏幕。
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
的值应作为文本输出。
输入参数
fileID
— 文件标识符
1
(默认) | 2
| 标量
formatSpec
— 输出字段的格式
格式化操作符
输出字段的格式,使用格式化操作符指定。formatSpec
还可以包括普通文本和特殊字符。
如果 formatSpec
包括表示转义字符的字面文本,如 \n
,则 fprintf
将转换转义字符。
formatSpec
可以是用单引号引起来的字符向量,也可以是字符串标量。
格式化操作符
格式化操作符以百分号 %
开头,以转换字符结尾。转换字符是必需的。您也可以在 %
和转换字符之间指定标识符、标志、字段宽度、精度和子类型操作符。(操作符之间的空格无效,在这里显示空格只是为了便于阅读。)
转换字符
此表显示了要将数值和字符数据格式化为文本的转换字符。
值类型 | 转换 | 详细信息 |
---|---|---|
有符号整数 |
| 以 10 为基数 |
无符号整数 |
| 以 10 为基数 |
| 以 8 为基数(八进制) | |
| 以 16 为基数(十六进制),小写字母 | |
| 与 | |
浮点数 |
| 定点记数法(使用精度操作符指定小数点后的位数。) |
| 指数记数法,例如 | |
| 与 | |
| 更紧凑的 | |
| 更紧凑的 | |
字符或字符串 |
| 单个字符 |
| 字符向量或字符串数组。输出文本的类型与 |
可选运算符
可选标识符、标志、字段宽度、精度和子类型操作符进一步定义了输出文本的格式。
标识符
处理函数输入参数的顺序。使用语法
,其中n
$n
代表函数调用中其他输入参数的位置。示例:
('%3$s %2$s %1$s %2$s','A','B','C')
将输入参数'A'
、'B'
、'C'
输出为:C B A B
。注意:如果输入参数为数组,则不能使用标识符指定该输入参数中的特定数组元素。
标志
'–'
左对齐。
示例:%-5.2f
示例:%-10s
'+'
始终为任何数值输出符号字符(+ 或 –)。
示例:%+5.2f
右对齐文本。
示例:%+10s
' '
在值之前插入空格。
示例:% 5.2f
'0'
在值之前补零以填充字段宽度。
例如:%05.2f
'#'
修改选定的数值转换:
对于
%o
、%x
或%X
,将输出0
、0x
或0X
前缀。对于
%f
、%e
或%E
,即使精度为零也将输出小数点。对于
%g
或%G
,不删除尾随零或小数点。
示例:
%#5.0f
字段宽度
要输出的最低字符数。字段宽度操作符可以是数字,也可以是指向输入参数的星号 (
*
)。当您将
*
指定为字段宽度操作符时,其他输入参数必须指定打印宽度和要打印的值。宽度和值可以是参数对组,也可以是数值数组中的对组。使用*
作为字段宽度操作符时,您可以打印具有不同宽度的不同值。示例:输入参数
('%12d',intmax)
等效于('%*d',12,intmax)
。示例:输入参数
('%*d',[2 10 5 100])
返回'10 100'
,其中两个空格分配给10
,五个空格分配给100
。您也可以将字段宽度和值指定为多个参数,如('%*d',2,10,5,100)
中所示。除非标志另行指定,否则该函数使用空格填充值之前的字段宽度。
精度
对于
%f
、%e
或%E
小数点右侧的位数
示例:'%.4f'
将pi
输出为'3.1416'
对于
%g
或%G
有效位数
示例:'%.4g'
将pi
输出为'3.142'
精度操作符可以是数字,也可以是指向参数的星号 (
*
)。当您将
*
指定为字段精度操作符时,其他输入参数必须指定打印精度和要打印的值。精度和值可以是参数对组,也可以是数值数组中的对组。使用*
作为精度操作符时,您可以打印具有不同精度的不同值。将
*.*
指定为字段宽度和精度操作符时,必须以三元组形式指定字段宽度、精度和值。示例:输入参数
('%.4f',pi)
等效于('%.*f',4,pi)
。示例:输入参数
('%6.4f',pi)
等效于('%*.*f',6,4,pi)
。示例:输入参数
('%*.*f',6,4,pi,9,6,exp(1))
返回'3.1416 2.718282'
,其中以9
和6
分别作为exp(1)
输出的字段宽度和精度。注意
如果您为浮点值指定的精度操作符所表示的精度超出输入数值数据类型的精度,则在指定精度内,结果与输入值可能不匹配。结果取决于您的计算机硬件和操作系统。
子类型
可以使用子类型操作符将浮点值显示为八进制、十进制或十六进制值。子类型操作符紧邻转换字符之前。此表显示了可使用子类型的转换。
输入值类型
子类型和转换字符
输出值类型
浮点数
%bx
或%bX
%bo
%bu
双精度十六进制、八进制或十进制值
例如:%bx
将pi
输出为400921fb54442d18
%tx
或%tX
%to
%tu
单精度十六进制、八进制或十进制值
例如:%tx
将pi
输出为40490fdb
格式化操作符前或后的文本
formatSpec
还可以在百分号 %
前添加其他文本,或者在转换字符后添加其他文本。文本可以为:
要打印的普通文本。
您无法作为普通文本输入的特殊字符。此表显示了如何在
formatSpec
中表示特殊字符。特殊字符
表示形式
单引号
''
百分比字符
%%
反斜杠
\\
警报
\a
退格符
\b
换页符
\f
换行符
\n
回车符
\r
水平制表符
\t
垂直制表符
\v
其 Unicode® 数值可以通过十六进制数
N
表示的字符\xN
示例:
返回fprintf
('\x5A')'Z'
其 Unicode 数值可以通过八进制数
N
表示的字符\N
示例:
返回fprintf
('\132')'Z'
使用格式化操作符进行转换时要注意的行为
数值转换仅输出复数的实部。
如果指定不适合数据的转换(例如数值的文本转换),MATLAB 将改写指定的转换并使用
%e
。示例:
'%s'
将pi
转换为3.141593e+00
。如果对整数值应用文本转换(
%c
或%s
),MATLAB 会将对应于有效字符代码的值转换为字符。示例:
'%s'
将[65 66 67]
转换为ABC
。
A1,...,An
— 数值数组或字符数组
标量 | 向量 | 矩阵 | 多维数组
数值数组或字符数组,指定为标量、向量、矩阵或多维数组。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
输出参数
nbytes
— 字节数
标量
fprintf
所写入的字节数,作为标量返回。在写入文件时,nbytes
由字符编码所决定。向屏幕输出数据时,nbytes
是屏幕上显示字符的个数。
提示
读取函数
sscanf
和fscanf
的格式设定符不同于写入函数sprintf
和fprintf
的格式。读取函数不支持精度字段。宽度字段在写入函数中指定最小值,但在读取函数中指定最大值。如果您指定了无效的格式化操作符或特殊字符,则
fprintf
会输出所有文本,直到出现无效的操作符或字符,并丢弃其余部分。示例:如果
formatSpec
是'value = %z'
,则fprintf
将输出'value ='
,因为%z
不是格式化操作符。示例:如果
formatSpec
是'character \x99999 = %s'
,则fprintf
将输出'character'
,因为\x99999
不是有效的特殊字符。
参考
[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.
扩展功能
C/C++ 代码生成
使用 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 类型。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
此函数接受 GPU 数组,但不在 GPU 上运行。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
用法说明和限制:
此函数在分布式数组上运行,但在客户端 MATLAB 中执行。
有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)