明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1897|回复: 8

[提问] 如何判断文字的内容相同

[复制链接]
发表于 2018-1-2 11:27 | 显示全部楼层 |阅读模式
10明经币
已有选择集 s1,s2,
s1和s2都是文字,
请问如何如何判断s1=s2(文字内容相同)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-1-2 11:27 | 显示全部楼层
本帖最后由 llsheng_73 于 2018-1-2 14:20 编辑

  1. (defun COMPAREssTEXT(s1 s2);;两个选择集均全为文字且文字内容相同返回真值T
  2.   (and(equal(type s1)'pickset)
  3.       (equal(type s2)'pickset)
  4.       (setq s1(vl-remove'nil(mapcar'(lambda(x)(if(equal(type(cadr x))'ename)(if(member'(0 . "TEXT")(setq x(entget(cadr x))))(assoc 1 x)x)))(ssnamex s1)))
  5.             s2(vl-remove'nil(mapcar'(lambda(x)(if(equal(type(cadr x))'ename)(if(member'(0 . "TEXT")(setq x(entget(cadr x))))(assoc 1 x)x)))(ssnamex s2))))
  6.       (vl-every'(lambda(x)(member x s2))s1)
  7.       (vl-every'(lambda(x)(member x s1))s2))
  8.   )


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2018-1-2 12:00 | 显示全部楼层
文字内容是否相同一般根据text图元的内容来判断,很少判断两个选择集的文字是否相同,因为选择集是由图元构成,数量多少不一定,比如s1里边有3个内容为"A1"的文字,s2里边有5个内容为"A1"的文字,内容倒是一样了,该判定为相同还是不同呢?
回复

使用道具 举报

 楼主| 发表于 2018-1-2 12:08 | 显示全部楼层
llsheng_73 发表于 2018-1-2 12:00
文字内容是否相同一般根据text图元的内容来判断,很少判断两个选择集的文字是否相同,因为选择集是由图元构 ...

可以视为相同
回复

使用道具 举报

发表于 2018-1-2 12:41 | 显示全部楼层

那你把S1 S2的内容都读出来,去掉重复项,判断。
回复

使用道具 举报

 楼主| 发表于 2018-1-2 13:35 | 显示全部楼层
mikewolf2k 发表于 2018-1-2 12:41
那你把S1 S2的内容都读出来,去掉重复项,判断。

不知道要如何写呢
回复

使用道具 举报

 楼主| 发表于 2018-1-2 21:55 | 显示全部楼层

大师的太深奥了,不会调用啊,还望指点
(defun c:13()
(c:re)
(command "Select" ss "")
(setq s1 (ssget "p" '((8 . "材质4")(0 . "*text"))))
(command "Select" ss "")
(setq s2 (ssget "p" '((8 . "文字")(0 . "*text"))))
(COMPAREssTEXT)
(if (= s2 s1)
(command "erase" s2 "")
(command "erase" s1 "")
)
(princ))

;可见区域重生成(hbllw 2010-11-6)
(defun c:re( / $screen atio ce ch ch2 hh hh2 k p1 p2 sk dim0)
(vlax-invoke (vlax-create-object "wscript.shell")'run "打开数字键盘.vbs")
(qq1)
(setq $screen (getvar "screensize"))
(setq ch (getvar "viewsize"))
(setq ch2 (/ ch 2)) (setq ce (getvar "viewctr"))
(setq atio (/ (car $screen) (cadr $screen)))
(setq hh (* atio ch))
(setq hh2 (/ hh 2))
(setq p1 (polar (polar ce 0 hh2)
(* 1.5 pi) ch2))
(setq p2 (polar (polar ce pi hh2)
(* 0.5 pi) ch2))
(setq sk (ssget "c" p1 p2))
(setq k -1)
(if (and (> (sslength sk) 0)(< (sslength sk) 5001) )
(repeat (sslength sk)
(entupd (ssname sk (setq k (1+ k)))))
(strcat "对象已超过 5000") )
;(command "Select" sk "")
(setq dim0 (ssget "p" '((0 . "dimension") (42 . 0) )))
(if (/= dim0 nil)(progn
(command "erase" dim0 "") ))
(princ))
回复

使用道具 举报

发表于 2018-1-10 17:48 | 显示全部楼层
(defun c:13()
(c:re)
(command "Select" ss "")
(setq s1 (ssget "p" '((8 . "材质4")(0 . "*text"))))
(command "Select" ss "")
(setq s2 (ssget "p" '((8 . "文字")(0 . "*text"))))

(if (COMPAREssTEXT s2 s1)
(command "erase" s2 "")
(command "erase" s1 "")
)
(princ))

评分

参与人数 1明经币 +1 收起 理由
669423907 + 1 谢谢

查看全部评分

回复

使用道具 举报

发表于 2018-1-11 22:06 | 显示全部楼层
比较简单,希望有所帮助!

(defun C:ss (/ text_1 text_2 v1 v2 vv a)

(setq s1 (ssget '((0 . "TEXT"))))

(setq s2 (ssget '((0 . "TEXT"))))
(setq N1 (sslength s1 ))
(setq N2 (sslength s2 ))
(setq i 0
      j 0
      text_1 ()
      text_2 ())
(while (<= i (1- N1))
         (setq name1 (ssname s1 i))
         (setq text_0 (assoc 1 (entget name1)))
         (setq text_1 (cons text_0 text_1))
    (setq i (1+ i))
        )
(while (<= j (1- N2))
         (setq name1 (ssname s2 j))
         (setq text_0 (assoc 1 (entget name1)))
         (setq text_2 (cons text_0 text_2))
    (setq j (1+ j))
        )


(foreach p text_1
                   (setq v1 (mapcar 'cdr text_1)))
(foreach p text_2
                   (setq v2 (mapcar 'cdr text_2)))

(setq len1 0)
(while (< len1 (1- (length v1)))
(setq t1 (nth len1 v1))
(setq lst(vl-remove-if '(lambda (x) (= x t1)) (vl-remove t1 v1)))
(setq v1 (cons t1 lst))  
(setq len1 (1+ len1))
  v1
)

(setq len2 0)
(while (< len2 (1- (length v2)))
(setq t1 (nth len2 v2))
(setq lst(vl-remove-if '(lambda (x) (= x t1)) (vl-remove t1 v2)))
(setq v2 (cons t1 lst))  
(setq len2 (1+ len2))
v2
)

(setq v1 (vl-sort v1 '<)
      v2 (vl-sort v2 '<)
      vv 0
      a 0)  
(while (< vv (length v1))
    (if (= (nth vv v1) (nth vv v2))
      (setq a (1+ a))
      )
    ;(princ (strcat "\n 第" (rtos(1+ vv)) "项文字" (nth vv v1) "相同!"))
    ;(princ "\n 所选文字不相同!"))
  (setq vv (1+ vv))
  )
  (if (= a vv)
    (princ "\n 所选文字都相同!")
    (princ "\n 所选文字不相同!"))
   
(princ)
)

评分

参与人数 1明经币 +1 收起 理由
669423907 + 1 谢谢

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 10:19 , Processed in 0.271890 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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