美文网首页autolisp&visuallisp
AutoLisp分割字符串函数

AutoLisp分割字符串函数

作者: 吴吉光 | 来源:发表于2018-07-13 21:36 被阅读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)
    )
    

    相关文章

      网友评论

        本文标题:AutoLisp分割字符串函数

        本文链接:https://www.haomeiwen.com/subject/jxgspftx.html