LearningLisP 发表于 2022-7-6 09:50:59

更改多行文字的字母

嗨,大家好。又是我。。。
这可能吗?改变多行文字的字母?
 
实例
7-04DS23AG2、7-04DS24AG2、7-04DS25AG2、7-04DS03AG2、7-04DS04AG2、7-04DS05AG2。。。。。。等等
 
我想在一个选项中更改多行文字中的字母(示例中的粗体红色字母)。我希望可以做到。。提前感谢。。

MSasu 发表于 2022-7-6 10:12:28

为了确保可以做到这一点,您必须使用ENTGET获取实体的关联列表,使用SUBST更改字符串(存储在DXF代码1下),并调用ENTMOD来更新实体。
具有挑战性的部分将是设计修改字符串的函数——该算法取决于替换类型(按位置、按值)。
 
只要发布您的第一次尝试,就会得到帮助。
 
当做
米尔恰

Jack_O'nei 发表于 2022-7-6 10:17:05

如果您只想更改这一个字母,并假设这些文字图元都在一个图形中,请转至“编辑”菜单,然后单击“查找”。这将打开一个对话框,其中有几个选项可用于查找文本或替换文本。由于所有这些数字都以“AG2”结尾,因此可以将其用作搜索字符串,并将其替换为“AX2”或“g”应该是什么。通过单击该对话框中的“选项”按钮,您可以让它搜索(或不搜索)各种类型的文本,例如块属性值、表格文本等。只需选中或取消选中该项。

Tharwat 发表于 2022-7-6 10:31:13

来了,伙计。
 
如果您的字符(G)不是大写字母,则不会替换文本。
 

(defun c:Test (/ Nstr ss)
; Tharwat 25. 01. 2011
; Tested withAutoCAD 2010
(if (and (setq Nstr
(getstring "\n Enterg the replacement Text :"))
(setq ss
(ssget '((0 . "TEXT,MTEXT"))))
)
(
(lambda (i / ss1 e str GLoc 1st 2nd all)
      (while
          (setq ss1
   (ssname ss (setq i (1+ i))))
            (setq e (entget ss1))
                   (setq str
   (cdr (assoc 1 e)))
             (if
(eq
   nil (setq GLoc
      (vl-string-search "G" str)))
             (entupd
      (cdr (assoc -1
      (entmod (subst (cons 1 str)
       (assoc 1 e)
       e)
       )
      )
      )
      )
(progn
         (setq 1st
(substr str 1 GLoc))      
          (setq 2nd
   (substr str (+ 2 GLoc)))
         (setq all
    (strcat 1st Nstr 2nd))
            (entupd
       (cdr (assoc -1
   (entmod (subst (cons 1 all)
      (assoc 1 e) e)
      )
   )
   )
       )
)
)
               )
    )
   -1
   )
(princ "\n No texts selected")
)
(princ)
)

 
塔瓦特

LearningLisP 发表于 2022-7-6 10:48:46

@msasu公司
谢谢你的回复。但我是lisp编程的noob。仍在学习。无论如何,谢谢你的投入。。
 
@杰克
我从没想过。谢谢
 
@塔瓦特
很有魅力!非常感谢你。
 
给你们更多的力量,上帝保佑!

Tharwat 发表于 2022-7-6 11:00:22

 
不客气,伙计。
 
塔瓦特
页: [1]
查看完整版本: 更改多行文字的字母