[求助]分割字符串
<p>(defun c:tt ()<br/> (if (setq x (vlax-create-object "MSComDlg.CommonDialog"))<br/> (progn (vlax-put-property x "DialogTitle" "选择图形文件")<br/> (vlax-put-property x "Filename" "*.dwg")<br/> (vlax-put-property x "Filter" "*.dwg")<br/> (vlax-put-property x "MaxFileSize" 10000)<br/> ;; in lisp unbedingt notwendig, sonst kommt ne fehlermeldung von wegen zu wenig speicher<br/> (vlax-put-property x "Flags" 512) ;_ mehrer Dateien+explorer-design<br/> (vlax-put-property x "Action" 1) ;_ showopen-dialog <br/> (setq str (vlax-get-property x "Filename"))<br/> )<br/> )<br/> (if (/= str "*.dwg")<br/> str<br/> nil<br/> )<br/> str<br/>)</p><p>返回如:"F:\\2008\\下湖\\ 1.dwg 2.dwg 3.dwg"</p><p><br/>怎么样漂亮的转成<br/>'("F:\\2008\\下湖<a href="file://\\1.dwg">\\1.dwg</a>"<br/>"F:\\2008\\下湖<a href="file://\\2.dwg">\\2.dwg</a>"<br/>"F:\\2008\\下湖<a href="file://\\3.dwg">\\3.dwg</a>")</p> <p>(setq str "F:\\2008\\下湖\\ 1.dwg 2.dwg 3.dwg" files nil)<br/>(setq path (strcat (vl-filename-directory str) "\\"))<br/>(setq bases (substr str (+ (strlen path) 2) (strlen str)))<br/>(while (setq n (vl-string-position (ascii " ") bases))<br/> (setq file (substr bases 1 n))<br/> (setq bases (substr bases (+ n 2) (strlen bases)))<br/> (setq files (cons file files))<br/>)<br/>(setq file (substr bases 1 n))<br/>(setq files (cons file files))<br/>(reverse files)</p><p>返回:("1.dwg" "2.dwg" "3.dwg") </p><p>哪位来个漂亮一点的...也好收藏成通用函数</p><p></p> <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/defun.htm" target="_black"><font color="#0000ff">defun</font></a><font color="#0000ff"><b>str2lst</b></font>
<font color="#ff0000">(</font>str / i<font color="#ff0000">)</font><br/> <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/while.htm" target="_black"><font color="#0000ff">while</font></a>
<font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/setq.htm" target="_black"><font color="#0000ff">setq</font></a> i <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/vl-string-search.htm" target="_black"><font color="#0000ff">vl-string-search</font></a>
<font color="#ff00ff">" "</font> str <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/if.htm" target="_black"><font color="#0000ff">if</font></a> i <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/+.htm" target="_black"><font color="#0000ff">+</font></a>
<font color="#008000">2</font> i<font color="#ff0000">)</font>
<font color="#008000">0</font><font color="#ff0000">)</font><font color="#ff0000">)</font><font color="#ff0000">)</font><br/> <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/setq.htm" target="_black"><font color="#0000ff">setq</font></a> str <font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/vl-string-subst.htm" target="_black"><font color="#0000ff">vl-string-subst</font></a>
<font color="#ff00ff">"\"</font>\<font color="#ff00ff">"" "</font> " str i<font color="#ff0000">)</font><font color="#ff0000">)</font><br/> <font color="#ff0000">)</font><font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/read.htm" target="_black"><font color="#0000ff">read</font></a>
<font color="#ff0000">(</font><a href="http://www.mjtd.com/object/autolisp/strcat.htm" target="_black"><font color="#0000ff">strcat</font></a>
<font color="#ff00ff">"<font color="#ff0000">(</font>\"</font><font color="#ff00ff">" str "</font>\<font color="#ff00ff">"<font color="#ff0000">)</font>"</font><font color="#ff0000">)</font><font color="#ff0000">)</font><br/><font color="#ff0000">)</font><br/> 本帖最后由 作者 于 2008-8-14 8:59:25 编辑 <br /><br /> <strong><font face="Verdana" color="#61b713">byghbcx</font></strong><p>先谢谢。。。你的代码很漂亮,收藏先。</p><p></p> 这个是我找到的分割字符串的代码,跟大家分享;;;(setq str "F:\\2008\\下湖\\ 1.dwg 2.dwg 3.dwg")
;;;(cjw-string-split str " ")
;;;("F:\\2008\\下湖\\" "1.dwg" "2.dwg" "3.dwg")
(defun cjw-string-split (str
delimiter
/
lenStr
lenDelimiter
start@
lstStr
done
find@
)
(setq lenStr (strlen str)
lenDelimiter (strlen delimiter)
start@ 0
lstStr nil
done nil
)
(while (and (not done) (<= (1+ start@) lenStr))
(if (setq find@ (vl-string-search delimiter str start@))
(setq lstStr (cons
(if (zerop find@)
""
(substr str (1+ start@) (- find@ start@))
)
lstStr
)
start@ (+ find@ lenDelimiter)
)
(setq done t
lstStr (cons (substr str (1+ start@)) lstStr)
)
)
)
(if (= start@ lenStr)
(setq lstStr (cons "" lstStr))
)
(reverse lstStr)
)
byghbcx 发表于 2008-8-13 17:28 static/image/common/back.gif
(defun
str2lst
(str / i) (while
大哥,我想请问下这个函数我要怎么调用到分割带空格字符串程序里呢?谢谢!
页:
[1]