![]() |
将具有分隔符的字符串解析为列表 的问题
将具有分隔符的字符串解析为列表 的问题
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 |
所有的时间均为北京时间。 现在的时间是 07:56 AM. |