找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 800|回复: 1

[求助] [求助]:我有两个可替换文字,多行文字,属性,块文字的程序,但不会用,请教斑竹

[复制链接]
发表于 2006-7-1 13:05:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
请问下面程序的执行命令是什么
(defun Replace (ename oldtext newtext / NewDoc)
   (setq obj (vlax-ename->vla-object ename))
   (setq tj (cdr (assoc 0 (entget ename))))
   (if (not (and (= "" oldtext) (= "" newtext)))
     (progn
       (cond
  ((or (= tj "MTEXT") (= tj "TEXT"))
   (setq text1 (vla-get-textstring obj))
   ;;(setq text11 (krsubst newtext oldtext text1))
   (setq text11 (dos_strreplace text1 oldtext newtext))
   (setq text1_ok (vla-put-textstring obj text11))
  )
  ((= tj "INSERT")
   (setq variantvalue
   (vlax-variant-value (vla-GetAttributes obj))
   )
   (if (/= -1 (vlax-safearray-get-u-bound variantvalue 1))
      (progn
       (setq list_att (vlax-safearray->list variantvalue))
       (setq list_len (vl-list-length list_att))
       (setq ct 0)
       (repeat list_len
         (setq text1 (vla-get-textstring (nth ct list_att)))
         ;;(setq text11 (krsubst newtext oldtext text1))
         (setq text11 (dos_strreplace text1 oldtext newtext))
         (setq text1_ok
         (vla-put-textstring (nth ct list_att) text11)
         )
         (setq ct (1+ ct))
       )
     )
   )
  )
  ((= tj "ATTDEF")
   (setq text1 (vla-get-tagstring obj))
   ;;(setq text11 (krsubst newtext oldtext text1))
   (setq text11 (dos_strreplace text1 oldtext newtext))
   (setq text1_ok (vla-put-tagstring obj text11))
  )
       )
     )
     (progn
       (alert "原文字和新文字均为空还替换什么呢?白费劲!")
       (exit)
     )
   )
   (princ)
)


另外还有一个vba程序,运行不了,我是cad2002,怎样调试?
一个通配符号替换程序是VBA的
'支持通配符*格式的替换
'例:*(*)->*
  • 或A*B*->B*C*
    '支持替换前后*的数量不等
    Public Sub SuperReplace()
    On Error Resume Next
    Dim ss As AcadSelectionSet
    Dim str As String
    Dim pStart As String, pEnd As String
    Dim i As AcadEntity, j
    Dim ft(1) As Integer, fd(1)
    Dim pSS, pES
    Dim pStrs() As String
    Dim pSpec As String

    ThisDrawing.SelectionSets("*TlsText*").Delete
    Set ss = ThisDrawing.SelectionSets.Add("*TlsText*")

    pStart = Trim(ThisDrawing.Utility.GetString(True, "替换前:"))
    pEnd = Trim(ThisDrawing.Utility.GetString(True, "替换后:"))
    pSS = Split(pStart, "*")
    pES = Split(pEnd, "*")
    pSpec = Replace(pStart, "`", "``")
    pSpec = Replace(pSpec, "[", "`[")
    pSpec = Replace(pSpec, "]", "`]")
    pSpec = Replace(pSpec, ",", "`,")
    pSpec = Replace(pSpec, "@", "`@")
    pSpec = Replace(pSpec, "~", "`~")
    pSpec = Replace(pSpec, ".", "`.")
    pSpec = Replace(pSpec, "?", "`?")
    ft(0) = 0: fd(0) = "*Text"
    ft(1) = 1: fd(1) = pSpec
    ss.SelectOnScreen ft, fd


    For Each i In ss
    If UBound(pES) = 0 Then
    i.TextString = pEnd
    Else
    str = i.TextString
    ReDim pStrs(UBound(pSS) + 1) As String
    For j = 0 To UBound(pSS)
    pStrs(j) = LeftStr(str, pSS(j)) & pES(j)
    str = RightStr(str, pSS(j))
    Next j

    pStrs(UBound(pSS) + 1) = str
    i.TextString = Join(pStrs, "")
    End If
    Next i

    ThisDrawing.SelectionSets("*TlsText*").Delete

    End Sub

    还有,论坛似乎没有批量替换块中文字的程序?批量替换标注文字的程序也没有.有谁能填补此项空白
  • 论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    发表于 2006-7-5 17:21:36 | 显示全部楼层
    這函數需要再加載"DOSLIB"函數庫...
    你可以試試看以下用法...
    (setq ename (car (entsel "\n select object:")))
    (setq oldtext "面積")
    (setq newtext "area")
    (replace ename "面積" "area")

    [PHP]
    ;;替換文字,多行文字,屬性,塊文字的程序函數
    (defun Replace (ename oldtext newtext / NewDoc)
    (setq obj (vlax-ename->vla-object ename))
    (setq tj (cdr (assoc 0 (entget ename))))
    (if (not (and (= "" oldtext) (= "" newtext)))
    (progn
    (cond
    ((or (= tj "MTEXT") (= tj "TEXT"))
    (setq text1 (vla-get-textstring obj))
    (setq text11 (dos_strreplace text1 oldtext newtext));帶有DOSLIB函數庫
    (setq text1_ok (vla-put-textstring obj text11))
    )
    ((= tj "INSERT")
    (setq variantvalue
    (vlax-variant-value (vla-GetAttributes obj))
    )
    (if (/= -1 (vlax-safearray-get-u-bound variantvalue 1))
    (progn
    (setq list_att (vlax-safearray->list variantvalue))
    (setq list_len (vl-list-length list_att))
    (setq ct 0)
    (repeat list_len
    (setq text1 (vla-get-textstring (nth ct list_att)))
    (setq text11 (dos_strreplace text1 oldtext newtext));帶有DOSLIB函數庫
    (setq text1_ok
    (vla-put-textstring (nth ct list_att) text11)
    )
    (setq ct (1+ ct))
    )
    )
    )
    )
    ((= tj "ATTDEF")
    (setq text1 (vla-get-tagstring obj))
    (setq text11 (dos_strreplace text1 oldtext newtext));帶有DOSLIB函數庫
    (setq text1_ok (vla-put-tagstring obj text11))
    )
    )
    )
    (progn
    (alert "原文字和新文字均為空還替換什麼!!!")
    (exit)
    )
    )
    (princ))
    [/PHP]
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

    GMT+8, 2024-9-28 19:25 , Processed in 0.385609 second(s), 33 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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