gufeng 发表于 2008-10-15 16:27:00

将具有分隔符的字符串解析为列表 的问题

(StrParse Str Delimiter)<br/><br/><div class="FunctionBox">&nbsp;&nbsp;说明:</div><br/>将具有分隔符的字符串解析为列表<br/><br/><div class="FunctionBox">&nbsp;&nbsp;函数内容:</div><br/>(defun strParse&nbsp;(Str Delimiter / SearchStr StringLen return n char)<br/>&nbsp;(setq SearchStr Str)<br/>&nbsp;(setq StringLen (strlen SearchStr))<br/>&nbsp;(setq return '())<br/><br/><br/>&nbsp;(while (&gt; StringLen 0)<br/>&nbsp;&nbsp;(setq n 1)<br/>&nbsp;&nbsp;(setq char (substr SearchStr 1 1))<br/>&nbsp;&nbsp;(while (and (/= char Delimiter) (/= char ""))<br/>&nbsp;&nbsp;&nbsp;(setq n (1+ n))<br/>&nbsp;&nbsp;&nbsp;(setq char (substr SearchStr n 1))<br/>&nbsp;&nbsp;) ;_ end of while<br/>&nbsp;&nbsp;(setq return (cons (substr SearchStr 1 (1- n)) return))<br/>&nbsp;&nbsp;(setq SearchStr (substr SearchStr (1+ n) StringLen))<br/>&nbsp;&nbsp;(setq StringLen (strlen SearchStr))<br/>&nbsp;) ;_ end of while<br/>&nbsp;(reverse return)<br/>) ;_ end of defun<br/><br/><div class="FunctionBox">&nbsp;&nbsp;参数:</div><br/>Str:要解析的字符串<br/>Delimiter&nbsp;:要搜索的分隔符<br/><br/><div class="FunctionBox">&nbsp;&nbsp;返回值:</div><br/>一个字符串列表<br/><br/><div class="FunctionBox">&nbsp;&nbsp;示例:</div><p><br/>(setq a "Harp,Guiness,Black and Tan")<br/>(StrParse a ",")<br/>返回:<br/>("Harp" "Guiness" "Black and Tan")</p><p>上面的函数是否对于顿号("、")不起作用的 谢谢</p><p>(setq a "Harp、Guiness、Black and Tan")</p><p>&nbsp;(StrParse a "、")</p><p>返回还是</p><p>("Harp、Guiness、Black and Tan")</p>

jxlsp 发表于 2008-10-15 16:40:00

因为"、"是全角字,而比较时是半角,所以不成功.

gufeng 发表于 2008-10-15 16:42:00

<p>、 这个占了两个字符 晕&nbsp;怪不得,一下忘了</p>

gufeng 发表于 2008-10-15 16:59:00

<p>改了一下好像可以了&nbsp; 没时间自己再想了 将就用着先&nbsp; 嘿嘿</p><p></p><p>(defun C:aab ( / SearchStr StringLen return n char)<br/>&nbsp; (setq Str "aaate、btae12、c45、d313")<br/>&nbsp; (setq Delimiter "、")<br/>&nbsp;(setq SearchStr Str)<br/>&nbsp;(setq StringLen (strlen SearchStr))<br/>&nbsp;(setq return '())<br/>&nbsp;(while (&gt; StringLen 0)<br/>&nbsp; (setq n 1)<br/>&nbsp; (setq char (substr SearchStr 1 2))<br/>&nbsp; (while (and (/= char Delimiter) (/= char ""))<br/>&nbsp;&nbsp; (setq n (1+ n))<br/>&nbsp;&nbsp; (setq char (substr SearchStr n 2))<br/>&nbsp; ) ;_ end of while<br/>&nbsp; (setq return (cons (substr SearchStr 1 (1- n)) return))<br/>&nbsp; (setq SearchStr (substr SearchStr (+ n 2) StringLen))<br/>&nbsp; (setq StringLen (strlen SearchStr))<br/>&nbsp;) ;_ end of while<br/>&nbsp;(reverse return)<br/>) ;_ end of defun</p>

TANER 发表于 2008-10-20 07:57:00

(defun txt-str-split (str x / lst n str-n xlen)
(setq xlen (strlen x))
(while (setq n (vl-string-search x str))
    (setq str-n (substr str 1 n))
    (if (/= str-n "")
      (setq lst (cons str-n lst))
    )
    (setq str (substr str (+ 1 xlen n)))
)
(if (/= str "")
    (setq lst (cons str lst))
)
(reverse lst)
)
;;; 定界符分割文字成表,定界符去掉,定界符可以是多字符
(defun t2-str-split (str x / lst n str-n xlen)
(setq xlen (strlen x))
(while (setq n (vl-string-search x str))
    (setq str-n (substr str 1 (+ n xlen)))
    (if (/= str-n "")
      (setq lst (cons str-n lst))
    )
    (setq str (substr str (+ 1 xlen n)))
)
(if (/= str "")
    (setq lst (cons str lst))
)
(reverse lst)
)
;;; 定界符分割文字成表,定界符不去掉,定界符可以是多字符
页: [1]
查看完整版本: 将具有分隔符的字符串解析为列表 的问题