Matlab中compose函数使用

目录

语法

示例

将数字格式化为字符串

对数组中的列值进行格式化

当操作符多出或不足时值的格式化

字符串数组中的转义字符


        compose函数是将数据格式化为多个字符串。

语法

str = compose(formatSpec,A)
str = compose(formatSpec,A1,...,AN)
str = compose(txt)

说明

        str = compose( formatSpec,A) 使用 指定的格式化操作符对输入数组 A 中的数据值进行格式化,并在 str 中返回结果文本。compose 函数按列顺序对 A 中值进行格式化。

        如果 formatSpec 是字符串数组,则输出数组 str 也是字符串数组。否则,str 为字符向量元胞数组。

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

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

  • 如果 A 具有多行,则compose以具有相同行数的字符串数组或元胞数组形式返回 str。compose 会对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"

        创建包含 pi 和 e 值的数值数组。对不同的精度使用 %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."

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值