eechenchun 发表于 2020-7-1 15:47:10

cad文字操作

批量替换cad里面的文字把zip改成dxf
也不知道这样的弄得出来不,我是上面都不会 cad都是刚学的

就是在文件里搜索左边的每行一个   替换为右边的

muwind 发表于 2020-7-1 23:28:15

本帖最后由 muwind 于 2020-7-1 23:32 编辑

(defun c:BRT( / findbrt F N STRA STRB WZTHTMP)
(FYBEGIN)
(if (setq findbrt (findfile "brt.txt"))
      (progn
      (setq F (open findbrt "r"))
      (setq Wzthtmp(read-line F))
      (WHILE Wzthtmp
             (IF (setq N ( vl-string-search ";"Wzthtmp));文本文件中的分割符,仅查找第一个字符
               (progn
                  (setq stra (substr Wzthtmp 1N)
                     strb (substr Wzthtmp(+ N2)))
                  (FLRT stra strb)
                  (princ (strcat "\n" stra "替换成" strb ))
               )
             )
            (setq Wzthtmp(read-line F))
         )
      (close F)
       )
         (princ "找不到批量替换数据文件brt.txt")
   )
(FYEND)
)

(defun *Fyerror* (msg)
(princ (strcat"\n FyCAD提醒您 : "msg "(拜拜!欢迎再来哦!)"))
(setq *error* olderr)
(setvar "cmdecho" oldcmdecho)
(setvar "osmode" oldosmode)
(princ)
)


(defun Fybegin()
   (setq olderr *error*      
            *error**Fyerror* )
   (setq oldcmdecho (getvar "cmdecho" ))
   (setq oldosmode (getvar "osmode" ))
   (setvar "cmdecho" 0)
   (setvar "osmode" 0)
   (setvar "texteval" 1)
   (princ)
)

(defun Fyend()      
   (setq *error* olderr)
   (setvar "cmdecho" oldcmdecho)
   (setvar "osmode" oldosmode)
   (princ)
)
(defun FLRT (OldText NewText/ sset index pointer text text_str text_str_len OldText_Len NewText_len);RT=ReplaceText
(setq sset (ssget "_X" (list (cons 0 "text"))));仅选择单行文本
(setq index 0)
(while (and sset (/= (setq text (ssname sset index)) nil)) ;获取选择集中序号为index(初始为0,之后递增)的图元名
                                                                                    ;如果不存在退出循环,存在就继续执行下面的代码
      (setq pointer 1)
      (setq text_str (cdr (assoc 1 (entget text))));获取文本内容
      (setq text_str_len (strlen text_str));获取文本长度
      (setq OldText_len (strlen OldText));被替换的文本长度
      (setq NewText_len (strlen NewText));替换的文本长度
         (while (<pointer (- (+ text_str_len 2) OldText_Len));比如文本为“11”,替换“11”为“22”,第一次判断为4-2大1执行后续程序。
            (if (= (strcase (substr text_str pointer OldText_Len)) (strcase OldText));全部转为大写对比是否相同
               (progn
               (setq text_str (strcat (substrtext_str 1 (- pointer 1) ) NewText (substr text_str (+ pointer OldText_Len))))
                                 ;将替换前的文本,新的文本后替换后的文本组成新的文本内容
               (entmod (subst (cons 1 text_str) (assoc 1 (entget text)) (entget text)))
                                 ;修改文本的DXF完成文字修改
               (setq pointer (+ pointer NewText_Len) )
                                 ;新的对比起始点,原来起始点加上替换文本的长度
               (setq text_str_len (strlen text_str))
                                 ;替换后文本的长度
                );end progn
                              (setq pointer (1+ pointer))
            );end if
         );while
    (setq index (1+ index));选择集图元序号递增
   );while
)

BRT.TXT 文件的内容就是
OldText;NewText
中间用分号隔离开 07年用纯LISP写的,公司很多在用,我自己反而不怎么用了主要是照顾那些坚持用R14的前辈们

eechenchun 发表于 2020-7-2 10:06:28

也可以不错不错 灰常感谢

tryhi 发表于 2020-7-2 11:27:03

把zip改成dxf
cad都是刚学的
只看到这两句,其它都看不到






eechenchun 发表于 2020-7-2 13:46:57

tryhi 发表于 2020-7-2 11:27
把zip改成dxf
cad都是刚学的
只看到这两句,其它都看不到

附件里哦 附件里哦 附件里哦

paulpipi 发表于 2020-7-2 23:23:02

忙出一个未来 发表于 2020-7-7 11:40:18

输入的字符串有缺陷
页: [1]
查看完整版本: cad文字操作