dos_strformat

格式化字符串, 类似于C语言实时运行库函数sprintf.


语法

(dos_strformat format arg1 arg2 ...)

参数

format

字符串, 包含文本格式. 可以选择内置的格式标签按照格式化请求代替接下来指定的arg. arg参数的数量至少要与格式标签的数量相同.

 

格式标签有如下类型:

 

%[flags][width][.precision][length]specifier

 

Colder:

 

specifier大多数情况下用来定义类型和解释对应的值参数:

 

Specifier

输出

例子

c

字符

a

d or i

单精度整数

392

e

使用字符e(/exponent)的科学记数法

3.9265e+2

E

使用字符E的科学记数法

3.9265E+2

f

浮点型十进制

392.65

g

使用shorter类型 %e %f

392.65

G

使用shorter类型 %E %f

392.65

o

单精度八进制

610

s

字符串

sample

u

无符号十进制整数

7235

x

无符号十六进制整数

7fa

X

无符号十六进制整数(大写字母)

7FA

n

什么都不显示. 这个参数必须指向单精度整数, 以便字符串中的数字可以保存.

 

%

%紧随其它%字符可以输出一个%到字符串.

 

 

标签也可以包含标志(flags), 宽度(width), 精度(.precision)修正子属性, 下面这些规范为可选:

 

Flag

描述

-

适应宽度, 内部左对齐; 右侧按默认调整(请看 width sub-specifier).

+

强制显示正号或负号(+ or -). 默认只有负号才会显示.

(space)

如果没有标志可写, 在值的前面插入空格.

#

连同o,x或X一起使用结果会冠以0, 0x或0X与0是不同的.

连同e,E和f一起使用, 强制输出小数, 即便不包含小数部分. 默认情况下如果没有小数部分时自动取整.

连同g或G一起使用, 结果和e或E类似但不会删除末尾的0.

0

左边以0添充(请看 width sub-specifier).

 

 

Width

描述

数字

字符的最小输出倍数. 如果实际长度比这个数值小, 输出结果会以空格填充. 如果比它大的话不会截短.

*

未指定格式字符串宽度, 但是额外的整数值参数将会按格式参数进行处理.

 

 

Precision

描述

number

对于d,i,o,u,x,X): precision指定最小的位数. 如果实际长度比它小, 结果前面会以0填充. 比它大时结果不会断截短. 0的意思是不输出.

对于e,E和f: 意思是输出的小数位数.

对于g和Gs: 意思是输出的最大位数.

对于s: 意思是输出的最大长度. 默认情况下输出所有字符.

对于c: 没什么效果.

当未指定precision时, 默认值1. 如果这其间precision指代不清则假定是0.

*

precision并不是用于指定格式字符串的, 但是参数前面的额外整数值要求必须有格式.

 

 

Length

描述

h

用来解释短整数和无符号整数(只能搭配i,d,o,u,x和X使用).

l

用来解释长整数和无符号长整数(i, d, o, u, x和X), 同时还可用于宽字符串(c和s).

L

用来解释双精度长整型(只能搭配e,E,f,g和G使用).

 

substring

依赖字符串格式标签, 这个函数期待一个附加参数序列, 每个部分用来替代%-tag所指定的内容. 有一些与这些数字相同的参数作为%-tags期待值.

返回

如果成功, 返回格式化后的字符串.

nil 失败.

示例

(defun c:test (/ ch string count fp)

  (setq ch "h")

  (setq string "computer")

  (setq count -9234)

  (setq fp 251.7366)

  ; Display integers

  (princ

    (dos_strformat

      "Integer formats:\n   Decimal: %d  Justified: %.6d  Unsigned: %u\n"

      count count count

    )

  )

  ; Display decimals

  (princ

    (dos_strformat   

      "Decimal %d as:\n   Hex: %Xh  C hex: 0x%x  Octal: %o\n"

      count count count count

    )

  )

  ; Display characters

  (princ

    (dos_strformat   

      "Characters in field:\n%10c%5hc%5c%5lc\n"

      ch ch ch ch

    )

  )

  

  ; Display strings

  (princ

    (dos_strformat   

      "Strings in field:\n%25s\n%25.4hs\n   %s%25.3ls\n"

      string string string string

    )

  )

  ; Display real numbers

  (princ

    (dos_strformat   

      "Real numbers:\n   %f %.2f %e %E\n"

      fp fp fp fp

    )

  )

  (princ)

)

Output

Integer formats:

   Decimal: -9234  Justified: -009234  Unsigned: 4294958062

Decimal -9234 as:

   Hex: FFFFDBEEh  C hex: 0xffffdbee  Octal: 37777755756

Characters in field:

         h    h    h    h

Strings in field:

                 computer

                        c

   computer                      com

Real numbers:

   251.736600 251.74 2.517366e+002 2.517366E+002