carrot1983 发表于 2008-8-13 11:58:00

[求助]分割字符串

<p>(defun c:tt ()<br/>&nbsp; (if (setq x (vlax-create-object "MSComDlg.CommonDialog"))<br/>&nbsp;&nbsp;&nbsp; (progn (vlax-put-property x "DialogTitle" "选择图形文件")<br/>&nbsp;&nbsp;&nbsp; (vlax-put-property x "Filename" "*.dwg")<br/>&nbsp;&nbsp;&nbsp; (vlax-put-property x "Filter" "*.dwg")<br/>&nbsp;&nbsp;&nbsp; (vlax-put-property x "MaxFileSize" 10000)<br/>&nbsp;&nbsp;&nbsp; ;; in lisp unbedingt notwendig, sonst kommt ne fehlermeldung von wegen zu wenig speicher<br/>&nbsp;&nbsp;&nbsp; (vlax-put-property x "Flags" 512) ;_ mehrer Dateien+explorer-design<br/>&nbsp;&nbsp;&nbsp; (vlax-put-property x "Action" 1) ;_ showopen-dialog&nbsp; <br/>&nbsp;&nbsp;&nbsp; (setq str (vlax-get-property x "Filename"))<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (if (/= str "*.dwg")<br/>&nbsp;&nbsp;&nbsp; str<br/>&nbsp;&nbsp;&nbsp; nil<br/>&nbsp; )<br/>&nbsp; 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>

carrot1983 发表于 2008-8-13 12:29:00

<p>(setq str "F:\\2008\\下湖\\ 1.dwg 2.dwg 3.dwg" files nil)<br/>(setq path (strcat (vl-filename-directory&nbsp; str) "\\"))<br/>(setq bases (substr str (+ (strlen path) 2) (strlen str)))<br/>(while (setq n (vl-string-position (ascii " ") bases))<br/>&nbsp; (setq file (substr bases 1 n))<br/>&nbsp; (setq bases (substr bases (+ n 2) (strlen bases)))<br/>&nbsp; (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>

byghbcx 发表于 2008-8-13 17:28:00

<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/>&nbsp;&nbsp; <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/>&nbsp;&nbsp;&nbsp;&nbsp; <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/>&nbsp;&nbsp; <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/>

carrot1983 发表于 2008-8-14 08:58:00

本帖最后由 作者 于 2008-8-14 8:59:25 编辑 <br /><br /> <strong><font face="Verdana" color="#61b713">byghbcx</font></strong><p>先谢谢。。。你的代码很漂亮,收藏先。</p><p></p>

carrot1983 发表于 2008-8-14 09:03:00

这个是我找到的分割字符串的代码,跟大家分享;;;(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)
)

freeok 发表于 2013-11-24 10:50:40

byghbcx 发表于 2008-8-13 17:28 static/image/common/back.gif
(defun
        str2lst
        (str / i)&nbsp;&nbsp; (while


大哥,我想请问下这个函数我要怎么调用到分割带空格字符串程序里呢?谢谢!
页: [1]
查看完整版本: [求助]分割字符串