将具有分隔符的字符串解析为列表 的问题
www.dimcax.com
将具有分隔符的字符串解析为列表 的问题
(strparse str delimiter)
说明:
将具有分隔符的字符串解析为列表
函数内容:
(defun strparse (str delimiter / searchstr stringlen return n char)
(setq searchstr str)
(setq stringlen (strlen searchstr))
(setq return '())
(while (> stringlen 0)
(setq n 1)
(setq char (substr searchstr 1 1))
(while (and (/= char delimiter) (/= char ""))
(setq n (1+ n))
(setq char (substr searchstr n 1))
) ;_ end of while
(setq return (cons (substr searchstr 1 (1- n)) return))
(setq searchstr (substr searchstr (1+ n) stringlen))
(setq stringlen (strlen searchstr))
) ;_ end of while
(reverse return)
) ;_ end of defun
参数:
str:要解析的字符串
delimiter :要搜索的分隔符
返回值:
一个字符串列表
示例:
(setq a "harp,guiness,black and tan")
(strparse a ",")
返回:
("harp" "guiness" "black and tan")
上面的函数是否对于顿号("、")不起作用的 谢谢
(setq a "harp、guiness、black and tan")
(strparse a "、")
返回还是
("harp、guiness、black and tan")
d
因为"、"是全角字,而比较时是半角,所以不成功.
d
、 这个占了两个字符 晕 怪不得,一下忘了
d
改了一下好像可以了 没时间自己再想了 将就用着先 嘿嘿
(defun c:aab ( / searchstr stringlen return n char)
(setq str "aaate、btae12、c45、d313")
(setq delimiter "、")
(setq searchstr str)
(setq stringlen (strlen searchstr))
(setq return '())
(while (> stringlen 0)
(setq n 1)
(setq char (substr searchstr 1 2))
(while (and (/= char delimiter) (/= char ""))
(setq n (1+ n))
(setq char (substr searchstr n 2))
) ;_ end of while
(setq return (cons (substr searchstr 1 (1- n)) return))
(setq searchstr (substr searchstr (+ n 2) stringlen))
(setq stringlen (strlen searchstr))
) ;_ end of while
(reverse return)
) ;_ end of defun
d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32( txt-str-split (str x / lst n str-n xlen)
( xlen ( x))
( ( n ( x str))
( str-n ( str 1 n))
( ( str-n "")
( lst ( str-n lst))
)
( str ( str ( 1 xlen n)))
)
( ( str "")
( lst ( str lst))
)
( lst)
)
;;; 定界符分割文字成表,定界符去掉,定界符可以是多字符
( t2-str-split (str x / lst n str-n xlen)
( xlen ( x))
( ( n ( x str))
( str-n ( str 1 ( n xlen)))
( ( str-n "")
( lst ( str-n lst))
)
( str ( str ( 1 xlen n)))
)
( ( str "")
( lst ( str lst))
)
( lst)
)
;;; 定界符分割文字成表,定界符不去掉,定界符可以是多字符
d