AutoLisp分割字符串函数
2018-07-13 本文已影响0人
吴吉光
在数据处理的时候,查阅了一些常用的autoLisp函数,如下表:
函数 | 函数功能 | 说明 |
---|---|---|
(ASCII string) |
将字符串中的第一个字符转换成其ASCII码后返回。 | 参数"string"为一个字符串。函数返回值为整数。 |
(chr int) |
将代表字符ASCII码的整数转换成包含相应的单一字符的字符串。 | 参数"int"必须是整型且取值在 1-255 范围内。 |
(strlen [string]...) |
以整数形式返回一个字符串中字符的个数。 | 参数"string"为一个字符串。如果指定多个"string",函数返回所有参数的总长度。如果省略或输入空字符串,函数返回0。 |
(strcat [string [string]...]) |
将多个字符串拼接成一个长字符串后返回。 | 参数"string"为一个字符串。如果未提供参数,函数返回空字符串。 |
(substr string start [length]) |
返回字符串中的一个子字符串。 | 参数"string"为一个字符串,"start"为正整数,指定"string"中的开始位置(字符串中的第一个字符的位置为1)。"length"也为正整数,指定在"string"中进行搜索的字符的长度。如果未指定该参数,则子字符串延续到"string"的结尾。 |
(strcase string [which]) |
将字符串中的所有字母转换成大写或小写后返回。 | 参数"string"为一个字符串,如果提供"which"且其值不为nil,"string"中的所有字符将被转换成小写,否则将字符转换为大写。 |
(read [string]) |
返回字符串中的第一个表或第一个原子。 | 参数"string"为一个字符串。如果未指定参数,函数返回nil。如果字符串中包含由空格、换行符、制表符或括号等分隔符分开的多个词,则只返回其中的第一个词。 |
(wcmatch string pattern) |
将模式字符串与某指定的字符串进行匹配比较。 | 参数"string"为要比较的字符串,"pattern"为模式字符串,可以包含表1中所列的通配符。在多个模式条件之间用逗号分隔。如果"string"和"pattern"匹配,函数返回 T,否则返回nil。 |
表1
字符 | 说明 |
---|---|
# |
对比单一的数字 |
@ |
对比任何单一的字母字符 |
. (句号) |
对比任何单 一 的非字母字符 |
* (星号) |
对比任何字符列表, 包含空字符。 而其可使用在搜索格式的任何位置, 如开头、中间或结尾。 |
? |
对比任何单一的字符 |
~ |
如果它为格式中的第一个字符, 则其将对比除该格式以外的任何符号 |
[...] |
对比括号中的任何一个字符 |
[~...] |
对比不在括号内,表示单一字符的范闱 |
- |
用在中括号内, 表示单一字符的范闱 |
, (逗号) |
分隔两种格式 |
' (反单引号) |
跳脱特殊字母(依照顺序读取下个字符) |
一般的,一行有多个数据,中间用分隔符隔开。但是我没有找到有关分割字符串的函数,于是决定自己写一个。代码如下。
; user defined function strsplit.
; strsplit splits a string with delimiter, and return a list.
; example: (strsplit "1,22,333,4444" ",") -->> ("1","22","333","4444")
; (strsplit ",1,22,333,4444," ",") -->> ("" "1" "22" "333" "4444" "")
(defun strsplit(datastr delimiter)
(setq strlist '()
str ""
)
(setq n (strlen datastr))
(setq i 1)
(repeat n
; s is a single letter, starts from the first to the end.
(setq s (substr datastr i 1))
;
(if (/= s delimiter)
; when s is't a delimiter
(progn
(setq str (strcat str s))
; if s is the last letter
(if (= i n)
(setq strlist (cons str strlist))
)
)
; when s is a delimiter
(progn
(setq strlist (cons str strlist))
(setq str "")
; if delimiter is the last letter
(if (= i n)
(setq strlist (cons "" strlist))
)
)
)
(setq i (1+ i))
)
; reverse list and retrun it
(reverse strlist)
)