AutoLisp分割字符串函數(shù)

在數(shù)據(jù)處理的時候,查閱了一些常用的autoLisp函數(shù),如下表:

函數(shù) 函數(shù)功能 說明
(ASCII string) 將字符串中的第一個字符轉換成其ASCII碼后返回。 參數(shù)"string"為一個字符串。函數(shù)返回值為整數(shù)。
(chr int) 將代表字符ASCII碼的整數(shù)轉換成包含相應的單一字符的字符串。 參數(shù)"int"必須是整型且取值在 1-255 范圍內。
(strlen [string]...) 以整數(shù)形式返回一個字符串中字符的個數(shù)。 參數(shù)"string"為一個字符串。如果指定多個"string",函數(shù)返回所有參數(shù)的總長度。如果省略或輸入空字符串,函數(shù)返回0。
(strcat [string [string]...]) 將多個字符串拼接成一個長字符串后返回。 參數(shù)"string"為一個字符串。如果未提供參數(shù),函數(shù)返回空字符串。
(substr string start [length]) 返回字符串中的一個子字符串。 參數(shù)"string"為一個字符串,"start"為正整數(shù),指定"string"中的開始位置(字符串中的第一個字符的位置為1)。"length"也為正整數(shù),指定在"string"中進行搜索的字符的長度。如果未指定該參數(shù),則子字符串延續(xù)到"string"的結尾。
(strcase string [which]) 將字符串中的所有字母轉換成大寫或小寫后返回。 參數(shù)"string"為一個字符串,如果提供"which"且其值不為nil,"string"中的所有字符將被轉換成小寫,否則將字符轉換為大寫。
(read [string]) 返回字符串中的第一個表或第一個原子。 參數(shù)"string"為一個字符串。如果未指定參數(shù),函數(shù)返回nil。如果字符串中包含由空格、換行符、制表符或括號等分隔符分開的多個詞,則只返回其中的第一個詞。
(wcmatch string pattern) 將模式字符串與某指定的字符串進行匹配比較。 參數(shù)"string"為要比較的字符串,"pattern"為模式字符串,可以包含表1中所列的通配符。在多個模式條件之間用逗號分隔。如果"string"和"pattern"匹配,函數(shù)返回 T,否則返回nil。

表1

字符 說明
# 對比單一的數(shù)字
@ 對比任何單一的字母字符
.(句號) 對比任何單 一 的非字母字符
*(星號) 對比任何字符列表, 包含空字符。 而其可使用在搜索格式的任何位置, 如開頭、中間或結尾。
? 對比任何單一的字符
~ 如果它為格式中的第一個字符, 則其將對比除該格式以外的任何符號
[...] 對比括號中的任何一個字符
[~...] 對比不在括號內,表示單一字符的范闈
- 用在中括號內, 表示單一字符的范闈
,(逗號) 分隔兩種格式
'(反單引號) 跳脫特殊字母(依照順序讀取下個字符)

一般的,一行有多個數(shù)據(jù),中間用分隔符隔開。但是我沒有找到有關分割字符串的函數(shù),于是決定自己寫一個。代碼如下。

; 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)
)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容