在數(shù)據(jù)處理的時候冀惭,查閱了一些常用的autoLisp函數(shù),如下表:
函數(shù) | 函數(shù)功能 | 說明 |
---|---|---|
(ASCII string) |
將字符串中的第一個字符轉(zhuǎn)換成其ASCII碼后返回掀鹅。 | 參數(shù)"string"為一個字符串云头。函數(shù)返回值為整數(shù)。 |
(chr int) |
將代表字符ASCII碼的整數(shù)轉(zhuǎn)換成包含相應(yīng)的單一字符的字符串淫半。 | 參數(shù)"int"必須是整型且取值在 1-255 范圍內(nèi)缓升。 |
(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"的結(jié)尾春贸。 |
(strcase string [which]) |
將字符串中的所有字母轉(zhuǎn)換成大寫或小寫后返回。 | 參數(shù)"string"為一個字符串遗遵,如果提供"which"且其值不為nil萍恕,"string"中的所有字符將被轉(zhuǎn)換成小寫,否則將字符轉(zhuǎn)換為大寫车要。 |
(read [string]) |
返回字符串中的第一個表或第一個原子允粤。 | 參數(shù)"string"為一個字符串。如果未指定參數(shù)屯蹦,函數(shù)返回nil维哈。如果字符串中包含由空格、換行符登澜、制表符或括號等分隔符分開的多個詞阔挠,則只返回其中的第一個詞。 |
(wcmatch string pattern) |
將模式字符串與某指定的字符串進行匹配比較脑蠕。 | 參數(shù)"string"為要比較的字符串购撼,"pattern"為模式字符串,可以包含表1中所列的通配符谴仙。在多個模式條件之間用逗號分隔迂求。如果"string"和"pattern"匹配,函數(shù)返回 T晃跺,否則返回nil揩局。 |
表1
字符 | 說明 |
---|---|
# |
對比單一的數(shù)字 |
@ |
對比任何單一的字母字符 |
. (句號) |
對比任何單 一 的非字母字符 |
* (星號) |
對比任何字符列表, 包含空字符掀虎。 而其可使用在搜索格式的任何位置凌盯, 如開頭、中間或結(jié)尾烹玉。 |
? |
對比任何單一的字符 |
~ |
如果它為格式中的第一個字符驰怎, 則其將對比除該格式以外的任何符號 |
[...] |
對比括號中的任何一個字符 |
[~...] |
對比不在括號內(nèi),表示單一字符的范闈 |
- |
用在中括號內(nèi)二打, 表示單一字符的范闈 |
, (逗號) |
分隔兩種格式 |
' (反單引號) |
跳脫特殊字母(依照順序讀取下個字符) |
一般的县忌,一行有多個數(shù)據(jù),中間用分隔符隔開。但是我沒有找到有關(guān)分割字符串的函數(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)
)