autolisp&visuallisp

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)
)
上一篇下一篇

猜你喜欢

热点阅读