明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3230|回复: 5

哪位高手能用VBA编一个为文字排序的程序

[复制链接]
发表于 2009-3-24 19:43:00 | 显示全部楼层 |阅读模式

根据CAD单行文字插入点进入排序,然后把值提取出来,用于计算,(类似对二维数组排序)谢谢了!!!!!

 楼主| 发表于 2009-3-27 16:06:00 | 显示全部楼层

哪们好心人帮帮忙呀。谢谢了

发表于 2009-3-27 21:06:00 | 显示全部楼层
用vl-sort函数就可以
 楼主| 发表于 2009-3-28 20:41:00 | 显示全部楼层

你说的是LISP语言,那具体怎么在选择集中对文字操作呢,谢谢你了,麻烦你了。

发表于 2009-4-2 13:01:00 | 显示全部楼层
本帖最后由 作者 于 2009-4-2 18:24:36 编辑

好象以前我的单行文字转多行文字里有相应的代码,找下吧

http://www.mjtd.com/bbs/dispbbs.asp?boardid=4&replyid=15810&id=19974&page=1&skin=0&landlord=0&Star=1

 楼主| 发表于 2009-8-15 16:05:00 | 显示全部楼层
;; 通用函数 选择集按照给定的组码值进行排序
;;;
;|;;参数说明:SE  ----要排序的选择集                                                                  
              DXF ----排序依据的组码号                                                                
              INT ----如果组码值为一个表,则INT指出使用第几个;否则nil                                
              FUZZ----允许偏差;若无为nil                                                             
              K   ----T表示从大到小,nil表示从小到大                                                  
    返回值:排序后的选择集                                                                            
    示例:(SORT-SE SS 10 0   5.0 T  )  表示按照10组码的X坐标值进行排序,允许偏差值为5.0,顺序为从大到小
          (SORT-SE SS 10 1   3.0 NIL)  表示按照10组码的Y坐标值进行排序,允许偏差值为3.0,顺序为从小到大
          (SORT-SE SS 8  NIL NIL NIL)  表示按照8组码值(图层名称)进行排序,顺序为从小到大            
|;
(vl-load-com)
(defun SORT-SE (SE DXF INT FUZZ K / ENT INDEX LST NEWLST NEWSE TMP)
    ;;建立排序列表
    (setq LST '()
   INDEX 0
    )
    (repeat (sslength SE)
 (setq ENT (entget (ssname SE INDEX))
       TMP (cdr (assoc DXF ENT))
 )
 (if (and INT
   (= (type INT) 'INT)
   (= (type TMP) 'list)
   (< INT (length TMP))
     )
     (setq TMP (nth INT TMP))
 )
 (setq LST (cons
        (list TMP (cdr (assoc 5 ENT)))
        LST
    )
 )
 (setq INDEX (1+ INDEX))
    )
    ;;排序操作
    (if (and FUZZ
      (or
   (= (type FUZZ) 'INT)
   (= (type FUZZ) 'REAL)
      )
      (or
   (= (type TMP) 'INT)
   (= (type TMP) 'REAL)
      )
 )
 (setq NEWLST
   (vl-sort LST
     (function (lambda (E1 E2)
     (< (+ (car E1) FUZZ) (car E2))
        )
     )
   )
 )
 (setq NEWLST
   (vl-sort LST
     (function (lambda (E1 E2)
     (< (car E1) (car E2))
        )
     )
   )
 )
    )
    ;;如果K为T,则倒置
    (if K
 (setq NEWLST (reverse NEWLST))
    )
    ;;组织排序后的选择集
    (setq NEWSE (ssadd))
    (foreach TMP NEWLST
 (setq NEWSE (ssadd (handent (cadr TMP)) NEWSE))
    )
    ;;返回值
    NEWSE
) ;_结束defun
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-27 20:04 , Processed in 0.173149 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表