高手请进 ,求文字数组替换lisp
本帖最后由 wchsunshine 于 2022-3-12 22:06 编辑求二次开发
功能: 数实现表二的文字直接替换成表一中的文字
实现结果:见运行后
哪位高手帮帮忙哈 其实这根本用不着编程,删除表2文字,复制表1 文字,也不麻烦!
非要写一个程序的话,用下面这个试试:
(defun c:tt (/ S1 S2 N LST1 LST2 A B e h1 h2)
(while
(and
(progn
(princ "\n选择表一文字:")
(setq s1 (ssget '((0 . "text"))))
)
(progn
(princ "\n选择表二文字:")
(setq s2 (ssget '((0 . "text"))))
)
)
(setq h1 0
h2 2
)
(repeat (setq n (sslength s1))
(setq lst1 (cons (setq e (ssname s1 (setq n (1- n)))) lst1))
(setq h1 (max h1 (cdr (assoc 40 (entget e)))))
)
(repeat (setq n (sslength s2))
(setq lst2 (cons (ssname s2 (setq n (1- n))) lst2))
(setq h2 (max h2 (cdr (assoc 40 (entget e)))))
)
(setq lst1
(vl-sort
lst1
'(lambda (a b)
(setq a (cdr (assoc 10 (entget a)))
b (cdr (assoc 10 (entget b)))
)
(if (equal (cadr a) (cadr b) h1)
(< (car a) (car b))
(> (cadr a) (cadr b))
)
)
)
)
(setq lst2
(vl-sort
lst2
'(lambda (a b)
(setq a (cdr (assoc 10 (entget a)))
b (cdr (assoc 10 (entget b)))
)
(if (equal (cadr a) (cadr b) h1)
(< (car a) (car b))
(> (cadr a) (cadr b))
)
)
)
)
(mapcar
'(lambda (a b)
(entmod
(subst (assoc 1 (entget a)) (assoc 1 (entget b)) (entget b))
)
)
lst1
lst2
)
)
(princ)
) g版就是厉害 删除表2,复制表1。这比用程序还快,毕竟以后程序多了,还要加载,load后,还要记得这个程序的名字。没意义嘛。 樓上的朋友,您沒看懂問題
(表一与表二的表格框 不一样) ,这个程序 主要是为了 画图时借用其他明细表内的内容。 本帖最后由 yxp 于 2013-7-23 18:37 编辑
程序实现倒很简单,只是CAD表格内文字的读取是个麻烦事,涉及到了表格线条包围的区域是否闭合问题。
在表格软件中,比如excel ,这简直没有任何障碍,直接访问 Range 对象即可,但CAD不行。
貌似院长有个程序可以识别,他不愿意公开源码。 谢谢版主,已测试可行 这个东西可以有,不错的
页:
[1]
2