AutoLisp从入门到放弃(十一)
字符串处理、转换函数
AutoLisp从入门到放弃(十一)
本章主要讲解AutoLisp中的字符串、字符处理函数。
一、常用字符串处理函数
函数名 | 函数功能 |
---|---|
acsii | 返回一个字符对应的ASCII码值。 |
chr | 整数对应的ASCII码值。 |
read | 返回字符串中的第一个表或第一个原子。 |
strcase | 转换字符串大小写。 |
strcat | 字符串连接函数,将多个字符串合并为一个字符串。 |
strlen | 返回字符串长度。 |
substr | 返回字符串中的一个子串。 |
wcmatch | 将模式字符串与某指定的字符串进行匹配比较。 |
atof | 将一个字符串转为浮点数。 |
atoi | 将一个字符串转为整数。 |
itoa | 将一个整数转换为字符串。 |
rtos | 将实数转换为字符串。 |
distof | 根据模式将字符串转换为实数值。 |
angtof | 根据模式将角度字符串转换为浮点型。 |
angtos | 角度转换为字符串值。 |
接下来将逐一介绍上述函数的用法:
1、ascii和chr函数
这两个函数比较简单,不做过多介绍,直接看代码:
(ascii "A") ;; 返回"A"对应的ASCII码整数值65。
(chr 65) ;; 返回65对应的ASCII码字符串"A"。
2、read函数
- 参数
参数 | 参数含义 |
---|---|
string | 字符串。string 参数不能在表或字符串外包含空格。 |
- 返回值
read 函数将其参数转换成相应的数据类型后返回。如果未指定参数,read 返回 nil。
如果字符串中包含由空格、换行符、制表符或括号等 LISP 分隔符分开的多个词,则只返回其中的第一个词。
- 用法
(read "hello world") ;; HELLO
(read "12 3") ;; 12
(read "(a b c) (d)") ;; (a b c)
(read "1.230") ;; 1.23
3、strcase函数
参数 | 参数含义 |
---|---|
string | 字符串。 |
flag | 如果提供该参数且其值不为 nil,string 中的所有字符将被转换成小写,否则将字符转换为大写。 |
- 返回值
转换之后的字符串。
- 用法
(strcase "HelloWorld") ;; "HELLOWORLD"
(strcase "HelloWorld" T) ;; "helloworld"
4、strcat和strlen函数
strcat:字符串连接函数,将多个字符串合并为一个字符串。
strlen:计算字符串长度。
这两个函数用法相对简单,直接通过代码展示效果:
(strcat "Hello" " " "World" "!") ;; "Hello World!"
(strlen "Hello World!") ;; 12
5、substr函数
参数 | 参数含义 |
---|---|
string | 字符串。 |
start | 整型,指定一个截取字符串的起始位置。 |
length | 整型,指定截取字符串的长度。 |
- 返回值
截取的结果字符串。
- 用法
(substr "HelloWorld" 1) ;; "HelloWorld",注意:截取字符串的函数字符串其实位置是1,而不是0
(substr "HelloWorld" 1 2) ;; "He"
6、wcmatch函数
参数 | 参数含义 |
---|---|
string | 要比较的字符串。比较是区分大小写的,所以必须严格匹配大小写字符。 |
pattern | 模式字符串,包含与 string 进行匹配的模式。pattern 可以包含表通配符中所列的通配符。在多个模式条件之间用逗号 (,) 分隔。函数仅比较 string 和 pattern 的前 500 个字符(约数),后面的字符将被省略。 |
- 返回值
如果 string 和 pattern 匹配,wcmatch 返回 T,否则 wcmatch 返回 nil。
通配符 | 定义 |
---|---|
# (磅值符号) | 匹配任意单个数值字符 |
@ (at) | 匹配任意单个字母字符 |
. (句号) | 匹配任意单个非字母数值字符 |
* (星号) | 匹配任意字符序列,包括空字符串,它可以出现在任何位置,包括开头、中间和结尾处 |
? (问号) | 匹配任意单个字符 |
~ (波浪号) | 如果它是模式字符串的第一个字符,则匹配除此字符串之外的任意字符串 |
[…] | 匹配括号中的任意一个字符 |
[~…] | 匹配不在括号中的任意单个字符 |
– (连字符) | 用在括号里面,用来指明单个字符的取值范围 |
, (逗号) | 分隔两个模式字符串 |
` (单引号) | 特殊转义字符(按字义读取随后的字符) |
- 用法
(wcmatch "Hello" "H*") ;; 返回T,判断字符串 "Hello" 是否以字符 H 开头
(wcmatch "Hello" "~*l*,H*") ;; 返回T,判断字符串中是否没有字母l或者以H开头,满足二者之一即返回T,这里满足以H开头。
- 如何在wcmatch中使用转义字符。
要测试一个字符串中的通配符,可以使用单个单引号 (`) 来转义字符。转义是指跟在单个单引号后面的字符不当作通配符读取,而是按其表面值进行比较。例如:
(wcmatch "Hello" "*`,*") ;; 返回nil,判断在字符串Hello中是否包含逗号,这里需要注意,在转义"\"字符的时候需要使用"`\\"
此函数在实际使用中一般不会涉及到复杂的功能,了解如何使用即可。
7、字符串相关转换函数
转换函数相对来说比较简单,所以我们也直接通过代码来演示如何使用。
(atof "1.25") ;; 1.25
(atoi "1") ;; 1
(atoi "1.25") ;; 1
(atof "1") ;; 1.0
(itoa 1) ;; "1"
8、distof和rtos函数
distof和rtos函数的参数中都会涉及到转换模式(mode)的指定,通过指定不同的mode来实现格式化不同格式的字符串或实数。
mode参数含义:
数值 | 单位 |
---|---|
1 | 科学 |
2 | 小数 |
3 | 工程(英尺和小数英寸) |
4 | 建筑(英尺和分数英寸) |
5 | 分数 |
;; 函数:(rtos number [mode] [precision])
(rtos 2.5 1 4) ;; "2.5000E+00"
(rtos 2.5 2 4) ;; "2.5000"
(rtos 2.5 3 4) ;; "2.5000\""
(rtos 2.5 4 2) ;; "2 1/2\""
(rtos 2.5 5 2) ;; "2 1/2"
;; 函数:(distof string [mode])
(distof "2.5000E+00" 1) ;; 2.5
(distof "2.5000" 2) ;; 2.5
(distof "2.5000\"" 3) ;; 2.5
(distof "2 1/2\"" 4) ;; 2.5
(distof "2 1/2" 5) ;; 2.5
9、angtof和angtos函数
angtof:将表示角度的字符串转换为实数(浮点数)形式的弧度值。
angtos:将一个以弧度为单位的角度值转换成字符串。
angtof和angtos函数是一对互补函数。如果将angtos函数创建的一个字符串作为参数传给函数angtof,那么,angtof函数保证会返回一个有效值,反之亦然。
在这两个函数中,units的含义如下:
数值 | 含义 |
---|---|
0 | (十进制)度 |
1 | 度/分/秒 |
2 | 百分度 |
3 | 弧度 |
4 | 勘测单位 |
;; 函数:(angtos angle [mode] [precision])
(angtos 1.5708 0 2) ;; "90.00"
(angtos 1.5708 1 2) ;; "90d0'"
(angtos 1.5708 2 2) ;; "100.00g"
(angtos 1.5708 3 2) ;; "1.57r"
(angtos 1.5708 4 2) ;; "N"
;; 函数:(angtof string [units])
(angtof "90.00" 0) ;; 1.5708
(angtof "90d0'" 1) ;; 1.5708
(angtof "100.00g" 2) ;; 1.5708
(angtof "1.57r" 3) ;; 1.57
(angtof "N" 4) ;; 1.5708
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)