好为人师 发表于 2006-7-1 13:06:00

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

<P>请问下面程序的执行命令是什么<BR>(defun Replace (ename oldtext newtext / NewDoc)<BR>&nbsp;&nbsp; (setq obj (vlax-ename-&gt;vla-object ename))<BR>&nbsp;&nbsp; (setq tj (cdr (assoc 0 (entget ename))))<BR>&nbsp;&nbsp; (if (not (and (= "" oldtext) (= "" newtext)))<BR>&nbsp;&nbsp;&nbsp;&nbsp; (progn<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond<BR>&nbsp; ((or (= tj "MTEXT") (= tj "TEXT"))<BR>&nbsp;&nbsp; (setq text1 (vla-get-textstring obj))<BR>&nbsp;&nbsp; ;;(setq text11 (krsubst newtext oldtext text1))<BR>&nbsp;&nbsp; (setq text11 (dos_strreplace text1 oldtext newtext))<BR>&nbsp;&nbsp; (setq text1_ok (vla-put-textstring obj text11))<BR>&nbsp; )<BR>&nbsp; ((= tj "INSERT")<BR>&nbsp;&nbsp; (setq variantvalue<BR>&nbsp;&nbsp; (vlax-variant-value (vla-GetAttributes obj))<BR>&nbsp;&nbsp; )<BR>&nbsp;&nbsp; (if (/= -1 (vlax-safearray-get-u-bound variantvalue 1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq list_att (vlax-safearray-&gt;list variantvalue))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq list_len (vl-list-length list_att))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ct 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (repeat list_len<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq text1 (vla-get-textstring (nth ct list_att)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;(setq text11 (krsubst newtext oldtext text1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq text11 (dos_strreplace text1 oldtext newtext))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq text1_ok<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vla-put-textstring (nth ct list_att) text11)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ct (1+ ct))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp; )<BR>&nbsp; )<BR>&nbsp; ((= tj "ATTDEF")<BR>&nbsp;&nbsp; (setq text1 (vla-get-tagstring obj))<BR>&nbsp;&nbsp; ;;(setq text11 (krsubst newtext oldtext text1))<BR>&nbsp;&nbsp; (setq text11 (dos_strreplace text1 oldtext newtext))<BR>&nbsp;&nbsp; (setq text1_ok (vla-put-tagstring obj text11))<BR>&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp; (progn<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (alert "原文字和新文字均为空还替换什么呢?白费劲!")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (exit)<BR>&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp; )<BR>&nbsp;&nbsp; (princ)<BR>)</P>
<P><BR>另外还有一个vba程序,运行不了,我是cad2002,怎样调试?<BR>一个通配符号替换程序是VBA的<BR>'支持通配符*格式的替换<BR>'例:*(*)-&gt;*[*]或A*B*-&gt;B*C*<BR>'支持替换前后*的数量不等<BR>Public Sub SuperReplace()<BR>On Error Resume Next<BR>Dim ss As AcadSelectionSet<BR>Dim str As String<BR>Dim pStart As String, pEnd As String<BR>Dim i As AcadEntity, j<BR>Dim ft(1) As Integer, fd(1)<BR>Dim pSS, pES<BR>Dim pStrs() As String<BR>Dim pSpec As String</P>
<P>ThisDrawing.SelectionSets("*TlsText*").Delete<BR>Set ss = ThisDrawing.SelectionSets.Add("*TlsText*")</P>
<P>pStart = Trim(ThisDrawing.Utility.GetString(True, "替换前:"))<BR>pEnd = Trim(ThisDrawing.Utility.GetString(True, "替换后:"))<BR>pSS = Split(pStart, "*")<BR>pES = Split(pEnd, "*")<BR>pSpec = Replace(pStart, "`", "``")<BR>pSpec = Replace(pSpec, "[", "`[")<BR>pSpec = Replace(pSpec, "]", "`]")<BR>pSpec = Replace(pSpec, ",", "`,")<BR>pSpec = Replace(pSpec, "@", "`@")<BR>pSpec = Replace(pSpec, "~", "`~")<BR>pSpec = Replace(pSpec, ".", "`.")<BR>pSpec = Replace(pSpec, "?", "`?")<BR>ft(0) = 0: fd(0) = "*Text"<BR>ft(1) = 1: fd(1) = pSpec<BR>ss.SelectOnScreen ft, fd</P>
<P><BR>For Each i In ss<BR>If UBound(pES) = 0 Then<BR>i.TextString = pEnd<BR>Else<BR>str = i.TextString<BR>ReDim pStrs(UBound(pSS) + 1) As String<BR>For j = 0 To UBound(pSS)<BR>pStrs(j) = LeftStr(str, pSS(j)) &amp; pES(j)<BR>str = RightStr(str, pSS(j))<BR>Next j</P>
<P>pStrs(UBound(pSS) + 1) = str<BR>i.TextString = Join(pStrs, "")<BR>End If<BR>Next i</P>
<P>ThisDrawing.SelectionSets("*TlsText*").Delete</P>
<P>End Sub</P>
<P>还有,论坛似乎没有批量替换块中文字的程序?批量替换标注文字的程序也没有.有谁能填补此项空白</P>

bh5280 发表于 2006-7-1 18:10:00

<P>(Replace&nbsp;(car (entsel)) oldtext newtext)</P>
<P>试试 find</P>

wzz1968 发表于 2006-7-1 19:11:00

<P>本类程序实现起来比较简单.</P>
<P>版本高一点的AUTOCAS本身就提供了相应的功能.</P>
<P>&nbsp;</P>

LONGXIN 发表于 2006-7-1 20:06:00

CAD不是有FIND命令吗?
页: [1]
查看完整版本: 我有两个可替换文字,多行文字,块属性的程序,但不会用,请教斑竹