magicheno 发表于 2021-7-6 22:01:19

如何实现文本批量选择,批量替换

本帖最后由 magicheno 于 2021-7-6 22:04 编辑

这个功能比较适用在目录编辑的时候,实现文本批量选择,批量替换。大佬们按顺序点选右边的单行文本,框选或者点选左边的,可以实现第二张那张图吗


start4444 发表于 2021-7-6 22:01:20

试试,单行文字由上到下顺序批选批刷



magicheno 发表于 2021-7-6 23:51:01

本帖最后由 magicheno 于 2021-7-6 23:52 编辑

start4444 发表于 2021-7-6 23:17
试试,单行文字由上到下顺序批选批刷
感谢大侠出手,试了下效果不错的,就是都是框选的,但是我的想法选择对象应该是只能依次用点选的吧,因为选择的对象都在每个图框的图名里面,框选选不到呢

start4444 发表于 2021-7-7 00:16:38

为什么你要上个误导的示意图····图框和文字根本是两码事

magicheno 发表于 2021-7-7 00:19:12

本帖最后由 magicheno 于 2021-7-7 00:20 编辑

start4444 发表于 2021-7-7 00:16
为什么你要上个误导的示意图····图框和文字根本是两码事
看来以后的更加精确的提问了,抱歉呢大侠,因为我想着以为图框里的图名或者平面图底下的图名都是单行文本格式应该和我举例的是一回事吧,惭愧

start4444 发表于 2021-7-7 00:38:38

那就是提取的不用排序了,把ss1那句换成这个就行了 (setq ss1 (ssget '((0 . "text"))) lst1 (ss->lst ss1))

magicheno 发表于 2021-7-7 00:44:48

本帖最后由 magicheno 于 2021-7-7 00:46 编辑

start4444 发表于 2021-7-7 00:38
那就是提取的不用排序了,把ss1那句换成这个就行了 (setq ss1 (ssget '((0 . "text"))) lst1 (ss->lst ss1) ...
(defun c:tt6 (/ lst1 lst2 ss1 ss2)
(prompt "\n【提取文字】:")
(setq ss1 (ssget '((0 . "text"))) lst1 (ss->lst ss1))
(prompt "\n【刷对象】:")
(setq ss2 (ssget ":s" '((0 . "text"))) lst2 (ss->lst ss2) lst2 (vl-sort lst2 '(lambda (a b) (> (cadr (cdr (assoc 10 (entget a)))) (cadr (cdr (assoc 10 (entget b))))))))
(mapcar'(lambda (a b) (entmod (setq ent2 (entget b) ent2 (subst (assoc 1 (entget a)) (assoc 1 ent2) ent2 )))) lst1 lst2)
(princ)
)
;;120.2 [功能] 选择集->图元列表
(defun ss->lst (ss / I L)
(repeat (setq i (sslength ss))
    (setq L (cons (ssname ss (setq i (1- i))) L))
)
)


可以了实现了,感谢大侠

magicheno 发表于 2021-7-7 00:53:34

start4444 发表于 2021-7-7 00:38
那就是提取的不用排序了,把ss1那句换成这个就行了 (setq ss1 (ssget '((0 . "text"))) lst1 (ss->lst ss1) ...
大佬想再请教你另外的新的个问题,如下图的右边是带空格的单行文本,能否实现,提取文字空格左边的文字,然后替换左边的文字如下图

start4444 发表于 2021-7-7 11:38:56

magicheno 发表于 2021-7-7 00:53
大佬想再请教你另外的新的个问题,如下图的右边是带空格的单行文本,能否实现,提取文字空格左边的文字, ...

(defun c:tt5 (/ lst1 lst2 ss1 ss2)
(prompt "\n【提取文字】:")
(setq ss1 (ssget '((0 . "text"))) lst1 (ss->lst ss1))
(prompt "\n【刷对象】:")
(setq ss2 (ssget ":s" '((0 . "text"))) lst2 (ss->lst ss2) lst2 (vl-sort lst2 '(lambda (a b) (> (cadr (cdr (assoc 10 (entget a)))) (cadr (cdr (assoc 10 (entget b))))))))
(mapcar'(lambda (a b) (entmod (setq ent2 (entget b) ent2 (subst (cons 1 (car (Parse_zhs (cdr (assoc 1 (entget a))) " "))) (assoc 1 ent2) ent2 )))) lst1 lst2)
(princ)
)
;;120.2 [功能] 选择集->图元列表
(defun ss->lst (ss / I L)
(repeat (setq i (sslength ss))
    (setq L (cons (ssname ss (setq i (1- i))) L))
)
)


;;说明:分割字符串by GU
                ;;参数:str:
                ;;参数:del:
                ;;返回:
(defun Parse_zhs (str del / pos lst)
(while (setq pos (vl-string-search del str))
    (setq lst (cons (substr str 1 pos) lst)
          str (substr str (+ pos 1 (strlen del)))
    )
)
(reverse (cons str lst))
)

magicheno 发表于 2021-7-7 13:41:30

start4444 发表于 2021-7-7 11:38
(defun c:tt5 (/ lst1 lst2 ss1 ss2)
(prompt "\n【提取文字】:")
(setq ss1 (ssget '((0 . "text"))) ...

大佬实在太感谢了
页: [1] 2
查看完整版本: 如何实现文本批量选择,批量替换