yaokui25 发表于 2012-11-14 08:17:39

求助!如何提取括号内文字并拷贝

本帖最后由 yaokui25 于 2012-11-14 11:53 编辑



小弟最近遇到一个头疼的事
就是要拷贝例如: PL 330*9*820 N=12
这样的一段字符串[括号内文字]   提取出来,刷其他的文字

如果这样很困的话,提起出来拷贝,粘贴也行,但是最好是刷其他的文字!!!
小弟在这里谢谢大家了

下面是我在论坛上找到的一段代码,求大家完善
如果在选择的过程中可以只选择括号内文字就好了
小弟对LISP不是很了解,但现在正努力学习中,希望大家给与帮助
;;; -------------------------------------------------------------------------
;;; 文本内容刷V2.1命令fa   --by 阿甘 2012.9
;;; 支持块中文字(块中文字只能点选,其它文字可以框选)、单行文字、多行文字、天正文字、天正图名、天正标高、属性文字、块中属性文字
(vl-load-com) ; 加载VL函数
(setq source_text nil) ; 设源文字为全局变量
(defun c:fa (/ en en_data en1 en1_data ent entype i ob pt ss ss_data)
(setvar "cmdecho" 0)
(setvar "ErrNo" 0)
(command "_.undo" "_begin")
(if (= source_text nil)
    (if (setq en (nentsel "\n请选择源文字(右键退出):"))
      (setq en_data (entget (car en))
            entype (cdr (assoc 0 en_data))
   source_text (if (= entype "ATTDEF")(cdr (assoc 2 en_data))(cdr (assoc 1 en_data)));如果是属性字,则取“标记”为源文字
      )
    )
    (if (and (= (setq en (nentsel (strcat "\n请选择源文字: 默认:" source_text))) nil) (= (getvar "ErrNo") 52))
      (setvar "ErrNo" 0)
      (if en
(setq en_data (entget (car en))
       entype (cdr (assoc 0 en_data))
       source_text (if (= entype "ATTDEF")(cdr (assoc 2 en_data))(cdr (assoc 1 en_data)))
)
(setvar "ErrNo" 52)
      )
    )
)
(prompt "\n请选择要修改内容的文字:")
(while (/= (getvar "ErrNo") 52)
    (prompt (strcat "\n文字内容将被刷成:" source_text))
    (if (and (setq ss (ssget ":S" '((0 . "*TEXT,TCH_DRAWINGNAME,TCH_ELEVATION,INSERT,ATTDEF,ATTRIB")))) source_text)
      (progn
(if (= (caar (setq ss_data (ssnamex ss 0))) 1)
   (progn         ; 点选时
   (setq ent (ssname ss 0)
    pt (trans (cadr (last (car ss_data))) 0 1)
    en1 (car (nentselp pt))
    en1_data (entget en1)
    entype (cdr (assoc 0 en1_data))
    ob (vlax-ename->vla-object en1)
   )
   (wenzishua entype ob source_text en1 ent)
   (princ)
   )
   (progn         ; 框选时
   (setq i 0)
   (repeat (sslength ss)
       (setq en1 (ssname ss i)
      ent en1
      en1_data (entget en1)
      entype (cdr (assoc 0 en1_data))
      ob (vlax-ename->vla-object en1)
       )
       (wenzishua entype ob source_text en1 ent)
       (setq i (1+ i))
   )          ; end repeat
   )
)
      )
    )
)         ; end while
(command "_.undo" "_end")
(setvar "ErrNo" 0)
(setvar "cmdecho" 1)
(princ)
)
(defun wenzishua (entype ob source_text en1 ent)
; cad文字的内容格式刷
(if (or
(= entype "TEXT")
(= entype "MTEXT")
      )
    (progn
      (vla-put-TextString ob source_text)
      (entupd en1)
      (entupd ent)
    )
)         
; 天正文字的内容格式刷
(if (or
(= entype "TCH_TEXT")
(= entype "TCH_ELEVATION")
      )
    (progn
      (vlax-put-property ob 'Text source_text)
      (entupd en1)
      (entupd ent)
    )
)         
; 天正图名、标高的内容格式刷
(if (= entype "TCH_DRAWINGNAME")
    (progn
      (vlax-put-property ob 'NameText source_text)
      (entupd en1)
      (entupd ent)
    )
)
; 属性文字 只改"标记"
(if (= entype "ATTDEF")
    (progn
      (vla-put-TagString ob source_text);改标记
      (entupd en1)
      (entupd ent)
    )
)
; 块中属性文字 只改"默认"
(if (= entype "ATTRIB")
    (progn
      (vla-put-TextString ob source_text);改默认
      (entupd en1)
      (entupd ent)
    )
)
)


Gu_xl 发表于 2012-11-14 08:17:40


(defun c:tt (/ e1 e2 n n1 n2 s str1)
(while
    (progn
      (princ "\n选择源文字:")
      (and
        (setq e1 (ssget ":S" '((0 . "*text"))))
        (progn
          (setq e1 (ssname e1 0))
          (redraw e1 3)
          (setq str1 (cdr (assoc 1 (entget e1))))
          (setq n1 (VL-STRING-SEARCH "[" str1)
                n2 (VL-STRING-SEARCH "]" str1)
                )
          (and n1 n2 (> n2 n1))
          )
        )
      )
    (setq str1 (substr str1 (+ 2 n1) (- n2 n1 1)))
    (while (setq s (ssget ":S" '((0 . "*text"))))
      (repeat (setq n (sslength s))
        (setq e2 (entget (ssname s (setq n (1- n)))))
        (entmod (subst (cons 1 str1) (assoc 1 e2) e2))
        )
      (princ "\n继续选择替换文字,回车结束:")
      )
    (redraw e1 4)
    )
(if e1 (redraw e1 4))
(princ)
)

yaokui25 发表于 2012-11-14 08:50:27

小弟在线等~~~

yaokui25 发表于 2012-11-14 09:42:57

大家都忙着手里的活呢吧,没人理啊

wowan1314 发表于 2012-11-14 09:59:04

本帖最后由 wowan1314 于 2012-11-14 10:17 编辑

试试--取出括号内文字写入剪切板。子函数论坛上找的。

yaokui25 发表于 2012-11-14 10:26:10

wowan1314 发表于 2012-11-14 09:59 static/image/common/back.gif
试试--取出括号内文字写入剪切板。子函数论坛上找的。

谢谢,楼上提供的代码,不过小弟不是很了解LISP
只能等待带高手解决了 嘿嘿~

phoenixdjq 发表于 2012-11-14 10:40:25

本帖最后由 phoenixdjq 于 2012-11-14 10:41 编辑

只修改最后面的数字吗
能再具体一点吗

yaokui25 发表于 2012-11-14 10:47:04

yaokui25 发表于 2012-11-14 10:26 static/image/common/back.gif
谢谢,楼上提供的代码,不过小弟不是很了解LISP
只能等待带高手解决了 嘿嘿~

剪切板内确实提取出我想要的文字。可是我想要的是选择文字之后接下载就是粘贴文字
不想再剪切板内再把文字复制一下,再粘贴
这样的话有点麻烦,嘿嘿

yaokui25 发表于 2012-11-14 10:51:09

phoenixdjq 发表于 2012-11-14 10:40 static/image/common/back.gif
只修改最后面的数字吗
能再具体一点吗

我是想提取出 PL 330*9*820 N=12这是一个字符串
提取出 1BKW2 
去刷其他的文字,使其他文字变为 1BKW2

或者直接提取出 1BKW2之后复制粘贴也可以

phoenixdjq 发表于 2012-11-14 11:00:53

发个cad的图吧,我看看,也许 有现成的程序
页: [1] 2 3
查看完整版本: 求助!如何提取括号内文字并拷贝