格式化字符串, 类似于C语言实时运行库函数sprintf.
(dos_strformat format arg1 arg2 ...)
format
字符串, 包含文本格式. 可以选择内置的格式标签按照格式化请求代替接下来指定的arg. arg参数的数量至少要与格式标签的数量相同.
格式标签有如下类型:
%[flags][width][.precision][length]specifier
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)
)
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