Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

compose

将数据格式化为多个字符串

说明

示例

str = compose(formatSpec,A) 使用 formatSpec 指定的格式化操作符对输入数组 A 中的数据值进行格式化,并在 str 中返回结果文本。compose 函数按列顺序对 A 中值进行格式化。如果 formatSpec 是字符串数组,则输出数组 str 也是字符串数组。否则,str 为字符向量元胞数组。

compose 还会转换 formatSpec 中的转义字符序列。转义字符序列表示非打印字符,或者指定插入换行符或制表符等操作。

compose 函数可以字符串数组或字符向量元胞数组形式返回多个格式化文本段,这一点与 sprintf 不同。sprintf 函数只返回一个字符串标量或字符向量。

  • 如果 A 具有多行,则 compose 以具有相同行数的字符串数组或元胞数组形式返回 strcompose 会对 str 中的每一行重复应用 formatSpec,获得 A 中对应行的格式化值。

  • 如果 A 中的列数超出 formatSpec 中的操作符数量,则 compose 会重复应用 formatSpec,作为 str 的附加列。A 的附加列为 str 中的新列提供格式化的值。

  • 如果 A 中的列数少于 formatSpec 中的运算符数量,则 compose 不使用这些多出的操作符对值进行格式化。相反,compose 会在 str 中放置保持不变的格式化操作符。但是,compose 会转换除 \\%% 之外的所有转义字符序列。

str = compose(formatSpec,A1,...,AN) 对多个输入数组中数据值进行格式化,并串联所有格式化的值。当 compose 使用 formatSpec 中的一些格式化操作符转换某一输入数组中的数据后,则已用的这些格式化操作符将无法用于其后续输入数组。

例如,如果 formatSpec"%f %f %d %s",并且 A1 具有两列,则操作符 "%f %f" 将仅应用于 A1 中的值。它们不能应用于 A2 或任何其他输入数组。compose 会将剩余的操作符 "%d %s" 应用于 A2,...,AN

如果最后一个输入数组 AN 中的列数超出剩余的操作符数,则 compose 会向 str 中添加额外的列,如上述语法中所述。如果 AN 中的列数少于剩余操作符数,则 compose 会将最后未用的操作符原样置于 str 中。

示例

str = compose(txt) 会转换 txt 中的转义字符序列。

  • 如果 txt 不包含格式化操作符,则 compose 会转换所有转义字符序列。它将保留所有其他字符不变。

  • 如果 txt 包含格式化操作符,则 compose 将转换除 \\%% 之外的所有转义字符序列。它将保留所有其他字符(包括格式化操作符)不变。

示例

全部折叠

pi 格式化为八位小数,并将其作为字符串返回。

A = pi
A = 3.1416

从 R2017a 开始,您可以使用双引号创建字符串。指定 formatSpec 为字符串。

formatSpec = "%.8f"
formatSpec = 
"%.8f"
str = compose(formatSpec,A)
str = 
"3.14159265"

创建包含 pie 值的数值数组。对不同的精度使用 %e%f 操作符。

A = [pi exp(1)]
A = 1×2

    3.1416    2.7183

formatSpec = "The value of pi is %.2e; the value of e is %.5f.";
str = compose(formatSpec,A)
str = 
"The value of pi is 3.14e+00; the value of e is 2.71828."

对从数值数组中获取的值进行格式化。由于数值数组包含多行,因此 compose 返回具有相同行数的字符串数组。

X = [1 2 3 4 5]';
Y = X.^2;

从 R2017a 开始,您可以使用双引号创建字符串。将 formatSpec 指定为字符串,并以字符串数组形式返回格式化的值。

formatSpec = "%d.^2 = %d";
str = compose(formatSpec,X,Y)
str = 5x1 string
    "1.^2 = 1"
    "2.^2 = 4"
    "3.^2 = 9"
    "4.^2 = 16"
    "5.^2 = 25"

当数据数组中的列数不等于操作符数量时值的格式化。如果 A 中有多出的列,则 compose 将作为输出字符串数组的附加列重复应用 formatSpec

从 R2017a 开始,您可以使用双引号创建字符串。指定 formatSpec 为字符串。

formatSpec = "The time is %d:%d";
A = [8 15 9 30;
     10 20 11 50];
str = compose(formatSpec,A)
str = 2x2 string
    "The time is 8:15"     "The time is 9:30" 
    "The time is 10:20"    "The time is 11:50"

A 中列数少于操作符数时值的格式化。

formatSpec = "Check-in time %d:%d; Check-out time %d:%d";
A = [12 27;
     11 16];
str = compose(formatSpec,A)
str = 2x1 string
    "Check-in time 12:27; Check-out time %d:%d"
    "Check-in time 11:16; Check-out time %d:%d"

由于 A 只有两列,因此 compose 只使用 formatSpec 中的前两个格式化操作符来对值进行格式化。compose 保留其他格式化操作符不变。

创建包含转义字符序列的字符串数组以指定水平制表符。使用 compose 函数转换 \t 转义字符。从 R2017a 开始,您可以使用双引号创建字符串。

str = ["Name\tDate of Birth\tLocation";...
       "Jones\t10/20/2015\tUK";...
       "Simpson\t09/12/2015\tUSA"];
newStr = compose(str)
newStr = 3x1 string
    "Name->Date of Birth->Location"
    "Jones->10/20/2015->UK"
    "Simpson->09/12/2015->USA"

使用另一个 \ 字符可防止转换 \n

str = "Don't escape the second\n\\n escaped-character sequence.";
newStr = compose(str)
newStr = 
    "Don't escape the second
     \n escaped-character sequence."

输入参数

全部折叠

输出字段的格式,使用格式化操作符指定。formatSpec 还可以包括普通文本和特殊字符。

如果 formatSpec 包括表示转义字符的字面文本,如 \n,则 compose 将转换转义字符。

formatSpec 可以是用单引号引起来的字符向量,从 R2016b 开始,也可以是字符串标量。

格式化操作符

格式化操作符以百分号 % 开头,以转换字符结尾。转换字符是必需的。您也可以在 % 和转换字符之间指定标识符、标志、字段宽度、精度和子类型操作符。(操作符之间的空格无效,在这里显示空格只是为了便于阅读。)

转换字符

此表显示了要将数值和字符数据格式化为文本的转换字符。

值类型转换详细信息

有符号整数

%d%i

以 10 为基数

无符号整数

%u

以 10 为基数

%o

以 8 为基数(八进制)

%x

以 16 为基数(十六进制),小写字母 af

%X

%x 相同,大写字母 AF

浮点数

%f

定点记数法(使用精度操作符指定小数点后的位数。)

%e

指数记数法,例如 3.141593e+00(使用精度操作符指定小数点后的位数)。

%E

%e 相同,但为大写,例如 3.141593E+00(使用精度操作符指定小数点后的位数)。

%g

更紧凑的 %e%f,不带尾随零(使用精度操作符指定有效数字位数。)

%G

更紧凑的 %E%f,不带尾随零(使用精度操作符指定有效数字位数。)

字符或字符串

%c

单个字符

%s

字符向量或字符串数组。输出文本的类型与 formatSpec 的类型相同。

可选操作符

可选标识符、标志、字段宽度、精度和子类型操作符进一步定义了输出文本的格式。

  • 标识符

    注意:sprintf 函数不同,compose 不支持标识符。

  • 标志

    '–'

    左对齐。
    示例:%-5.2f
    示例:%-10s

    '+'

    始终为任何数值输出符号字符(+ 或 –)。
    示例:%+5.2f
    右对齐文本。
    示例:%+10s

    ' '

    在值之前插入空格。
    示例:% 5.2f

    '0'

    在值之前补零以填充字段宽度。
    例如:%05.2f

    '#'

    修改选定的数值转换:

    • 对于 %o%x%X,将输出 00x0X 前缀。

    • 对于 %f%e%E,即使精度为零也将输出小数点。

    • 对于 %g%G,不删除尾随零或小数点。

    示例:%#5.0f

  • 字段宽度

    要输出的最低字符数。

    示例:'%5d'intmax 输出为 2147483647,因为 intmax 返回的值超出要输出的最小字符数。

    如果要输出的字符数小于字段宽度,则 compose 函数会使用空格填充值之前的字段宽度,除非标志另行指定。

    但是,num2str 函数不会用空格填充字段宽度。

  • 精度

    要打印的位数。

    对于 %f%e%E

    小数点右侧的位数
    示例:'%.4f'pi 输出为 '3.1416'

    对于 %g%G

    有效位数
    示例:'%.4g'pi 输出为 '3.142'

    示例:'%6.4f'pi 输出为 '3.1416'

    注意

    如果您为浮点值指定的精度操作符所表示的精度超出输入数值数据类型的精度,则在指定精度内,结果与输入值可能不匹配。结果取决于您的计算机硬件和操作系统。

  • 子类型

    可以使用子类型操作符将浮点值显示为八进制、十进制或十六进制值。子类型操作符紧邻转换字符之前。此表显示了可使用子类型的转换。

    输入值类型

    子类型和转换字符

    输出值类型

    浮点数

    %bx%bX
    %bo
    %bu

    双精度十六进制、八进制或十进制值
    例如:%bxpi 输出为 400921fb54442d18

    %tx%tX
    %to
    %tu

    单精度十六进制、八进制或十进制值
    例如:%txpi 输出为 40490fdb

格式化操作符前或后的文本

formatSpec 还可以在百分号 % 前添加其他文本,或者在转换字符后添加其他文本。文本可以为:

  • 要打印的普通文本。

  • 您无法作为普通文本输入的特殊字符。此表显示了如何在 formatSpec 中表示特殊字符。

    特殊字符

    表示形式

    单引号

    ''

    百分比字符

    %%

    反斜杠

    \\

    警报

    \a

    退格符

    \b

    换页符

    \f

    换行符

    \n

    回车符

    \r

    水平制表符

    \t

    垂直制表符

    \v

    其 Unicode® 数值可以通过十六进制数 N 表示的字符

    \xN

    示例:sprintf('\x5A') 返回 'Z'

    其 Unicode 数值可以通过八进制数 N 表示的字符

    \N

    示例:sprintf('\132') 返回 'Z'

使用格式化操作符进行转换时要注意的行为

  • 数值转换仅输出复数的实部。

  • 如果指定不适合数据的转换(例如数值的文本转换),MATLAB® 将改写指定的转换并使用 %e

    示例:'%s'pi 转换为 3.141593e+00

  • 如果对整数值应用文本转换(%c%s),MATLAB 会将对应于有效字符代码的值转换为字符。

    示例:'%s'[65 66 67] 转换为 ABC

数值数组、字符数组或字符串数组,指定为标量、向量、矩阵或多维数组。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string

输入文本,指定为字符串数组、字符向量或字符向量元胞数组。compose 将转换 txt 中的任何转义字符序列。例如,compose\n 转换为换行符。

数据类型: string | char | cell

输出参数

全部折叠

格式化文本,以字符串数组或字符向量元胞数组形式返回。

数据类型: string | cell

扩展功能

在 R2016b 中推出