哪位高手能用VBA编一个为文字排序的程序
<p>根据CAD单行文字插入点进入排序,然后把值提取出来,用于计算,(类似对二维数组排序)谢谢了!!!!!</p> <p>哪们好心人帮帮忙呀。谢谢了</p> 用vl-sort函数就可以 <p>你说的是LISP语言,那具体怎么在选择集中对文字操作呢,谢谢你了,麻烦你了。</p> 本帖最后由 作者 于 2009-4-2 18:24:36 编辑 <br /><br /> <p>好象以前我的单行文字转多行文字里有相应的代码,找下吧</p><p><a href="http://www.mjtd.com/bbs/dispbbs.asp?boardid=4&replyid=15810&id=19974&page=1&skin=0&landlord=0&Star=1">http://www.mjtd.com/bbs/dispbbs.asp?boardid=4&replyid=15810&id=19974&page=1&skin=0&landlord=0&Star=1</a></p> ;; 通用函数 选择集按照给定的组码值进行排序<br/>;;;<br/>;|;;参数说明:SE ----要排序的选择集 <br/> DXF ----排序依据的组码号 <br/> INT ----如果组码值为一个表,则INT指出使用第几个;否则nil <br/> FUZZ----允许偏差;若无为nil <br/> K ----T表示从大到小,nil表示从小到大 <br/> 返回值:排序后的选择集 <br/> 示例:(SORT-SE SS 10 0 5.0 T ) 表示按照10组码的X坐标值进行排序,允许偏差值为5.0,顺序为从大到小<br/> (SORT-SE SS 10 1 3.0 NIL) 表示按照10组码的Y坐标值进行排序,允许偏差值为3.0,顺序为从小到大<br/> (SORT-SE SS 8 NIL NIL NIL) 表示按照8组码值(图层名称)进行排序,顺序为从小到大 <br/>|;<br/>(vl-load-com)<br/>(defun SORT-SE (SE DXF INT FUZZ K / ENT INDEX LST NEWLST NEWSE TMP)<br/> ;;建立排序列表<br/> (setq LST '()<br/> INDEX 0<br/> )<br/> (repeat (sslength SE)<br/> (setq ENT (entget (ssname SE INDEX))<br/> TMP (cdr (assoc DXF ENT))<br/> )<br/> (if (and INT<br/> (= (type INT) 'INT)<br/> (= (type TMP) 'list)<br/> (< INT (length TMP))<br/> )<br/> (setq TMP (nth INT TMP))<br/> )<br/> (setq LST (cons<br/> (list TMP (cdr (assoc 5 ENT)))<br/> LST<br/> )<br/> )<br/> (setq INDEX (1+ INDEX))<br/> )<br/> ;;排序操作<br/> (if (and FUZZ<br/> (or<br/> (= (type FUZZ) 'INT)<br/> (= (type FUZZ) 'REAL)<br/> )<br/> (or<br/> (= (type TMP) 'INT)<br/> (= (type TMP) 'REAL)<br/> )<br/> )<br/> (setq NEWLST<br/> (vl-sort LST<br/> (function (lambda (E1 E2)<br/> (< (+ (car E1) FUZZ) (car E2))<br/> )<br/> )<br/> )<br/> )<br/> (setq NEWLST<br/> (vl-sort LST<br/> (function (lambda (E1 E2)<br/> (< (car E1) (car E2))<br/> )<br/> )<br/> )<br/> )<br/> )<br/> ;;如果K为T,则倒置<br/> (if K<br/> (setq NEWLST (reverse NEWLST))<br/> )<br/> ;;组织排序后的选择集<br/> (setq NEWSE (ssadd))<br/> (foreach TMP NEWLST<br/> (setq NEWSE (ssadd (handent (cadr TMP)) NEWSE))<br/> )<br/> ;;返回值<br/> NEWSE<br/>) ;_结束defun
页:
[1]