664571221 发表于 2025-5-24 11:38:34

各位大神,求输入TT,选择文字,统计还有符号 - 的文字个数,分别列出

本帖最后由 664571221 于 2025-5-24 11:40 编辑

各位大神,求输入TT,选择文字,统计含有符号 - 的文字个数,分别列出插入cad,如下图,附图纸

shujh1989 发表于 2025-5-24 15:24:26


(defun c:tt2 (/ ss i ent txt prefix prefix-list count-dict text-style text-height text-layer text-color pt row y-pos)
(vl-load-com)

; 选择包含编号的文本对象
(if (setq ss (ssget '((0 . "TEXT"))))
    (progn
      ; 初始化前缀列表和统计字典
      (setq prefix-list '()
            count-dict '())
      
      ; 获取第一个文本的属性作为参考
      (setq ent (ssname ss 0)
            text-style (cdr (assoc 7 (entget ent)))
            text-height (cdr (assoc 40 (entget ent)))
            text-layer (cdr (assoc 8 (entget ent)))
            text-color (cdr (assoc 62 (entget ent))))
      
      ; 遍历所有选中的文本
      (repeat (setq i (sslength ss))
      (setq ent (ssname ss (setq i (1- i)))
            txt (cdr (assoc 1 (entget ent))))
      
      ; 提取前缀(字母部分)
      (if (setq prefix (vl-string-right-trim "0123456789" txt))
          (progn
            ; 添加到前缀列表
            (if (not (member prefix prefix-list))
            (setq prefix-list (cons prefix prefix-list)))
            
            ; 更新统计计数
            (if (assoc prefix count-dict)
            (setq count-dict (subst (cons prefix (1+ (cdr (assoc prefix count-dict))))
                                     (assoc prefix count-dict)
                                     count-dict))
            (setq count-dict (cons (cons prefix 1) count-dict))))))
      
      ; 按字母顺序排序前缀列表
      (setq prefix-list (vl-sort prefix-list '<))
      
      ; 获取插入点
      (setq pt (getpoint "\n指定统计结果插入点: "))
      
      ; 输出统计结果
      (setq row 1)
      (foreach prefix prefix-list
      (setq y-pos (- (cadr pt) (* row text-height 1.5))
            txt (strcat prefix "共有" (itoa (cdr (assoc prefix count-dict))) "个"))
      
      (entmake (list '(0 . "TEXT")
                     (cons 1 txt)
                     (cons 10 (list (car pt) y-pos 0))
                     (cons 40 text-height)
                     (cons 7 text-style)
                     (cons 8 text-layer)
                     (if text-color (cons 62 text-color))))
      (setq row (1+ row))))
    (princ "\n未选择任何文本对象。"))
(princ))
同行?给排水的?

yaya7827 发表于 2025-5-24 12:05:48

论坛有类似的你得花点时间自己搜寻下

664571221 发表于 2025-5-24 15:29:29

shujh1989 发表于 2025-5-24 15:24
同行?给排水的?

厉害了兄弟,加我qq头像上

664571221 发表于 2025-5-24 15:30:37

(defun c:tt (/ e i p s s0 s1 ss)
    (if (setq s (ssget '((0 . "TEXT") (1 . "*-*"))))
      (progn
            (setq i -1)
            (while (setq e (ssname s (setq i (1+ i))))
                (setq s0 (cdr (assoc 1 (entget e))))
                (setq s0 (substr s0 1 (1+ (vl-string-search "-" s0))))
                (setq ss (cons s0 ss))
            )
            (setq s1 "")
            (while (setq e (car ss))
                (setq s (vl-remove-if-not '(lambda(x)(= e x))ss))
                (setq ss (vl-remove e ss))
                (setq s1 (strcat s1e "共有" (itoa (length s))"个\\P"))   
            )   
            (and (setq p (getpoint))
                (entmakex
                  (list '(0 . "MTEXT")
                        '(100 . "AcDbEntity")
                        '(100 . "AcDbMText")
                        (cons 7 (getvar "TEXTSTYLE"))
                        (cons 1 s1)
                        (cons 10 p)
                  )
                )
            )
      )
    )
)波总的代码

shujh1989 发表于 2025-5-24 15:50:02

664571221 发表于 2025-5-24 15:29
厉害了兄弟,加我qq头像上

以前加过,哈哈

下文没句号。 发表于 2025-5-24 17:55:18

shujh1989 发表于 2025-5-24 15:24
同行?给排水的?

为啥我的统计出来就是全部个数呢?

古藤上树 发表于 2025-5-27 16:19:02

shujh1989 发表于 2025-5-24 15:24
同行?给排水的?

怎么我加载,会显示有输入的列表有缺陷??我的是CAD2023

shujh1989 发表于 2025-5-28 11:12:01

古藤上树 发表于 2025-5-27 16:19
怎么我加载,会显示有输入的列表有缺陷??我的是CAD2023

一般是编码的问题,记事本打开的话另存为ANSI格式试一下。楼主的编号是CAD单行文字,可以用。天正的文字应该不行。

shujh1989 发表于 2025-5-28 11:13:05

古藤上树 发表于 2025-5-27 16:19
怎么我加载,会显示有输入的列表有缺陷??我的是CAD2023

楼主文件中是CAD单行文字,天正之类的应该不适用。
页: [1] 2
查看完整版本: 各位大神,求输入TT,选择文字,统计还有符号 - 的文字个数,分别列出