乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 124|回复: 9

[讨论]剛剛寫的一個查找和替換程序

[复制链接]

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2004-9-1 11:00:00 | 显示全部楼层 |阅读模式
各位朋友一起完善这个功能帮手加强下. 我先起个头. 谢谢!
;date: 2004-09-01
;by BDYCAD
;查找与替换
; (reptext  )
;应用举例:
;;;(SETQ char-A "DRAWING1" char-B "BDYCADCAD")
;;;(reptext char-A char-B)
(defun reptext(char-A char-B / pc ss index ent index typeA cosd newsize )
         (setq pc 0 ss (ssget "x" '((0 . "TEXT"))))
         (setq index 0 )
         (repeat (sslength ss)
                         (setq ent (entget (ssname ss index)))
                         (setq index (+ 1 index))
                         (setq typeA (assoc 1 ent)
                 cosd (substr (cdr typeA) 1 (strlen char-A)))
                         (if (= cosd char-A)
                                 (progn
                                         (setq newsize (cons 1 (if (> (strlen (cdr typeA))(strlen char-B))
                                                 (strcat char-B (substr (cdr typeA) (strlen char-A)))
                                                 char-B)))
                                         (setq ent (subst newsize typeA ent))
                                         (setq pc (1+ pc))
                                         (entmod ent))))
         (princ (strcat "\n替换了" (rtos pc)"个."))
)
回复

使用道具 举报

101

主题

507

帖子

11

银币

中流砥柱

Rank: 25

铜币
910
发表于 2004-9-1 11:07:00 | 显示全部楼层
CAD中有FIND命令的。
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2004-9-1 11:15:00 | 显示全部楼层
这个我明白. 可是我是要在程序调用的. 请问可以在lisp程序直接调用 find 命令(不用对话框方式)去查找替换?我没有做过. 但好象不行的. 所以就写了. 但现在程序功能很弱.
回复

使用道具 举报

36

主题

201

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
345
发表于 2004-9-2 17:29:00 | 显示全部楼层
  1. (defun Replace (ename oldtext newtext / NewDoc)
  2.    (setq obj (vlax-ename->vla-object ename))
  3.    (setq tj (cdr (assoc 0 (entget ename))))
  4.    (if (not (and (= "" oldtext) (= "" newtext)))
  5.        (progn
  6.            (cond
  7.   ((or (= tj "MTEXT") (= tj "TEXT"))
  8.    (setq text1 (vla-get-textstring obj))
  9.    ;;(setq text11 (krsubst newtext oldtext text1))
  10.    (setq text11 (dos_strreplace text1 oldtext newtext))
  11.    (setq text1_ok (vla-put-textstring obj text11))
  12.   )
  13.   ((= tj "INSERT")
  14.    (setq variantvalue
  15.     (vlax-variant-value (vla-GetAttributes obj))
  16.    )
  17.    (if (/= -1 (vlax-safearray-get-u-bound variantvalue 1))
  18.          (progn
  19.            (setq list_att (vlax-safearray->list variantvalue))
  20.            (setq list_len (vl-list-length list_att))
  21.            (setq ct 0)
  22.            (repeat list_len
  23.                (setq text1 (vla-get-textstring (nth ct list_att)))
  24.                ;;(setq text11 (krsubst newtext oldtext text1))
  25.                (setq text11 (dos_strreplace text1 oldtext newtext))
  26.                (setq text1_ok
  27.                (vla-put-textstring (nth ct list_att) text11)
  28.                )
  29.                (setq ct (1+ ct))
  30.            )
  31.        )
  32.    )
  33.   )
  34.   ((= tj "ATTDEF")
  35.    (setq text1 (vla-get-tagstring obj))
  36.    ;;(setq text11 (krsubst newtext oldtext text1))
  37.    (setq text11 (dos_strreplace text1 oldtext newtext))
  38.    (setq text1_ok (vla-put-tagstring obj text11))
  39.   )
  40.            )
  41.        )
  42.        (progn
  43.            (alert "原文字和新文字均为空还替换什么呢?白费劲!")
  44.            (exit)
  45.        )
  46.    )
  47.    (princ)
  48. )
这是我很早前写的一个程序中的一部分,调用了DOSLIB中的dos_strreplace函数,实际上也可写个程序来代替dos_strreplace函数的!它不只是可以替换Text或Mtext!
回复

使用道具 举报

11

主题

54

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
98
发表于 2004-9-3 12:26:00 | 显示全部楼层
原来cad中有个自带的chtext.lsp文件,可以实现文字替换,就是不支持mtext
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2004-9-3 13:19:00 | 显示全部楼层
这是我以前编的一个通配符号替换程序是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
回复

使用道具 举报

57

主题

466

帖子

8

银币

中流砥柱

Rank: 25

铜币
694
发表于 2004-9-14 11:42:00 | 显示全部楼层
支持 TEXT和MTEXT,如果要查找的文字为 "" 会把新的文字加在开头 只替换文字中子文字,不是替换掉整个文字
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:zeda5fqj0c1.LSP 
下载次数:0  文件大小:1.79 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]


演示文件,将0.010替换成0.050

4hxvxxgqmhd.gif

4hxvxxgqmhd.gif


[讨论]剛剛寫的一個查找和替換程序

ecfc0z35zmo.gif

ecfc0z35zmo.gif

回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2004-9-14 16:24:00 | 显示全部楼层
试了. 很好用.
回复

使用道具 举报

5

主题

58

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
78
发表于 2004-9-14 19:25:00 | 显示全部楼层
在lisp程序直接调用 find 命令,用对话框方式(设计或改进DCL来解决数据传递).初步估计能行.
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2004-9-14 21:31:00 | 显示全部楼层
为什么不用
(setq ss (ssget (list '(0 . "*Text") (cons 1 (strcat "*" char-A "*")))))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-20 01:11 , Processed in 1.034416 second(s), 78 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表