明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9422|回复: 26

利用LISP程序把文字放到粘贴板里面(最终程序在二楼。常用CC/C1效果自己测试)

  [复制链接]
发表于 2011-12-3 22:10:48 | 显示全部楼层 |阅读模式
本帖最后由 zhb236623 于 2011-12-26 14:48 编辑

借用了yucpp 的程序   http://bbs.mjtd.com/thread-85614-1-1.html




  1. ;;程序中的字符串哪里来的?我有个从cad中复制到剪切板的。
  2. ;;;=================================================================*
  3. ;;;功能:向系统剪贴板写入文字                                       *

  4. (defun ZML-CLIP-SETSTRING (STR / HTML RESULT)
  5.   (and (= (type STR) 'STR)
  6.        (setq HTML (vlax-create-object "htmlfile"))
  7.        (setq RESULT (vlax-invoke
  8.                       (vlax-get        (vlax-get HTML 'PARENTWINDOW)
  9.                                 'CLIPBOARDDATA
  10.                       )
  11.                       'SETDATA
  12.                       "Text"
  13.                       STR
  14.                     )
  15.        )
  16.        (vlax-release-object HTML)
  17.   )
  18. )
  19. ;;;=================================================================*
  20. ;;函数测试
  21. (defun c:cc ()
  22. (vl-load-com)
  23.   (setq ss (ssget '((0 . "*TEXT"))))
  24.   (setq i 0)
  25.   (setq last_stri_str "")
  26.   (repeat (sslength ss)

  27.   (setq txtcon (cdr (assoc 1 (entget (ssname ss i)))))

  28.   (setq txtcon_kuohao (strcat "(" txtcon ")"))


  29.   (setq last_stri   (vl-prin1-to-string txtcon_kuohao))

  30.   (setq last_stri_str (strcat last_stri_str last_stri))
  31. (setq i (1+ i))
  32. )

  33.   (setq last_stri_str (vl-string-translate "/" "-" last_stri_str))
  34. (setq last_stri_str (vl-string-translate """ " " last_stri_str))    ;;只好把这句再加上,然后把单个引号替换成空格。
  35. ;;;好像不能替换为空。不知道各位有什么好办法。这样得出来的两个地号中间就有一个空格,
  36. ;;不过这样也不影响命名规则

  37.   (ZML-CLIP-SETSTRING last_stri_str)
  38.   (princ "\n文字已复制到剪切板,可以直接粘贴了!")
  39.   (princ)
  40. )







本帖被以下淘专辑推荐:

发表于 2021-12-5 14:32:20 | 显示全部楼层
群主你的帖子最后得到的程序最终版本是哪个呢
 楼主| 发表于 2011-12-5 14:33:19 | 显示全部楼层
本帖最后由 zhb236623 于 2011-12-26 14:49 编辑

修改完的程序。


  1. ;;程序中的字符串哪里来的?我有个从cad中复制到剪切板的。
  2. ;;;=================================================================*
  3. ;;;功能:向系统剪贴板写入文字                                       *
  4. (defun ZML-CLIP-SETSTRING (STR / HTML RESULT)
  5.   (and (= (type STR) 'STR)
  6.        (setq HTML (vlax-create-object "htmlfile"))
  7.        (setq RESULT (vlax-invoke
  8.                       (vlax-get        (vlax-get HTML 'PARENTWINDOW)
  9.                                 'CLIPBOARDDATA
  10.                       )
  11.                       'SETDATA
  12.                       "Text"
  13.                       STR
  14.                     )
  15.        )
  16.        (vlax-release-object HTML)
  17.   )
  18. )
  19. ;;;=================================================================*
  20. ;;函数测试
  21. (defun c:cc ()
  22. (vl-load-com)
  23.   (setq ss (ssget '((0 . "*TEXT"))))
  24.   (setq i 0)
  25.   (setq last_stri_str "")
  26.   (repeat (sslength ss)
  27.   (setq txtcon (cdr (assoc 1 (entget (ssname ss i)))))
  28.   (setq txtcon_kuohao (strcat "(" txtcon ")"))
  29.   (setq last_stri   (vl-prin1-to-string txtcon_kuohao))
  30.   (setq last_stri_str (strcat last_stri_str last_stri))
  31. (setq i (1+ i))
  32. )
  33. (setq str0 (getvar "DwgName")       ;"宗地图.dwg"
  34.         str0 (substr str0 1 )
  35. )       ;"宗地图"

  36.   (setq str1 (vl-string-translate "/" "-" last_stri_str))
  37.   (setq str2 (vl-string-translate "\"" " " str1))

  38. (while (> (strlen str2) (strlen (setq str2 (vl-string-subst "" " " str2)))))    ;;加了这句就可以了。
  39. (setq str0 (vl-string-subst "" ".dwg"  str0))   。
  40. (setq str3 (strcat str0 str2))
  41.   (ZML-CLIP-SETSTRING str3)
  42.   (princ "\n文字已复制到剪切板,可以直接粘贴了!")
  43.   (princ)
  44. )

  45. ;;(while (> (strlen str) (strlen (setq str (vl-string-subst "" " " str)))))
  46. (defun c:c1 ()
  47. (vl-load-com)
  48.   (setq ss (ssget '((0 . "*TEXT"))))
  49.   (setq i 0)
  50.   (setq last_stri_str "")
  51.   (setq last_stri_hanzi "")
  52.   (repeat (sslength ss)
  53.   (setq txtcon (cdr (assoc 1 (entget (ssname ss i)))))
  54.   (if (> (ascii txtcon) 175)
  55.    
  56.     (progn
  57.   (setq txtcon_hanzi txtcon)
  58.     (setq last_stri_hanzi (strcat last_stri_hanzi  txtcon "、"))  
  59.    )
  60.   (progn
  61.    (setq txtcon_kuohao (strcat "(" txtcon ")"))
  62.     (setq last_stri   (vl-prin1-to-string txtcon_kuohao))
  63.     (setq last_stri_str (strcat last_stri_str last_stri))  
  64.   
  65.   )
  66. )
  67. (setq i (1+ i))
  68. )
  69.   (setq str1 (vl-string-translate "/" "-" last_stri_str))
  70.   (setq str2 (vl-string-translate "\"" " " str1))
  71. (while (> (strlen str2) (strlen (setq str2 (vl-string-subst "" " " str2)))))    ;;加了这句就可以了。
  72.   (setq str3 (strcat last_stri_hanzi str2))
  73.   (ZML-CLIP-SETSTRING str3)
  74.   (princ "\n文字已复制到剪切板,可以直接粘贴了!")
  75.   (princ)
  76. )


  77. (defun c:c2 ()
  78. (vl-load-com)
  79.   (setq txtss (ssget '((0 . "*TEXT"))))
  80.   (while (> (sslength txtss) 1)
  81.     (alert "只能选择一个文字串,请重新选择!")
  82.     (setq txtss (ssadd))
  83.     (setq txtss (ssget '((0 . "*TEXT"))))
  84.   )
  85.   (setq txtcon (cdr (assoc 1 (entget (ssname txtss 0)))))
  86.   (setq ent_str_last (vl-string-translate "/" "-" txtcon))
  87.   (setq ent_str_last_kuahao (strcat "(" ent_str_last ")"))
  88.   (ZML-CLIP-SETSTRING ent_str_last_kuahao)
  89.   (princ "\n文字已复制到剪切板,可以直接粘贴了!")
  90.   (princ)
  91. )  ;;end defun



本帖子中包含更多资源

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

x
发表于 2011-12-5 15:09:08 | 显示全部楼层
Try
;; (setq txtcon_kuohao (strcat "(" txtcon ")"))
  (setq txtcon_kuohao txtcon)
 楼主| 发表于 2011-12-5 15:46:18 | 显示全部楼层
本帖最后由 zhb236623 于 2011-12-5 15:54 编辑
Andyhon 发表于 2011-12-5 15:09
Try
;; (setq txtcon_kuohao (strcat "(" txtcon ")"))
  (setq txtcon_kuohao txtcon)


照现在这个程序复制出来的东东两个地号中间会有空格:(3-50-411-4)  (3-50-411-2)  (3-50-411-1)
即每个括号前或者后面都有一个空格。不过其实也不是很影响使用就是了。

这句应该不能去掉吧。我本来就是要在字符串  3-50-411-4  中加上括号   变成(3-50-411-4)

其实在程序中应该可以用read 去掉双引号。但是去掉就不是字符串,变成(3-50-411-4)   这样要用strcat函数好像就不能连接字符串了。

又试了把表加入选择集,最后再把选择集中各个表元素再变成一个表。但是还是没有成功。。。。求解。。谢谢。。

发表于 2011-12-5 16:15:27 | 显示全部楼层
..选择集...
得就您的图纸作调试之用
请依该图纸(*.dwg) 加注您所要的正确结果
 楼主| 发表于 2011-12-5 17:15:46 | 显示全部楼层
Andyhon 发表于 2011-12-5 16:15
..选择集...
得就您的图纸作调试之用
请依该图纸(*.dwg) 加注您所要的正确结果

原本图纸为   宗地图.dwg

要变成   宗地图(3-50-411-1111)(3-50-411-1).dwg   这样子

我现在的程序就是会在括号前后有空格   宗地图 (3-50-411-1111)  (3-50-411-1) .dwg   得到这样的结果。。。

本帖子中包含更多资源

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

x
发表于 2011-12-5 17:39:42 | 显示全部楼层
(defun c:c1 ()
  (vl-load-com)
  (princ "\n字串一: ")
  (setq e1 (ssget ":S:E" '((0 . "*TEXT"))))
  (princ "\n字串二: ")
  (setq e2 (ssget ":S:E" '((0 . "*TEXT"))))
  (setq str0 (getvar "DwgName")       ;"宗地图.dwg"
        str0 (substr str0 1 6)        ;"宗地图"
        str1 (cdr (assoc 1  (entget (ssname e1 0))))
        str2 (cdr (assoc 1  (entget (ssname e2 0))))
        str1 (vl-string-translate "/" "-"  str1)
        str2 (vl-string-translate "/" "-"  str2)
        strs (strcat str0 "(" str1 ")(" str2 ")")
  )
  (princ "\n") (princ strs)(princ)
)
 楼主| 发表于 2011-12-6 14:56:14 | 显示全部楼层
本帖最后由 zhb236623 于 2011-12-6 14:59 编辑
Andyhon 发表于 2011-12-5 17:39
(defun c:c1 ()
  (vl-load-com)
  (princ "\n字串一: ")


谢谢ANDYHON的指导。我的图纸可能也说得有问题,我只是列举了一种情况。地号可能有一行,可能有两行。没有说得很清楚 。。。从您的程序又学到不到。。。现在想问下个小问题。即替换。。。
  1. ;;程序中的字符串哪里来的?我有个从cad中复制到剪切板的。
  2. ;;;=================================================================*
  3. ;;;功能:向系统剪贴板写入文字                                       *
  4. (defun ZML-CLIP-SETSTRING (STR / HTML RESULT)
  5.   (and (= (type STR) 'STR)
  6.        (setq HTML (vlax-create-object "htmlfile"))
  7.        (setq RESULT (vlax-invoke
  8.                       (vlax-get        (vlax-get HTML 'PARENTWINDOW)
  9.                                 'CLIPBOARDDATA
  10.                       )
  11.                       'SETDATA
  12.                       "Text"
  13.                       STR
  14.                     )
  15.        )
  16.        (vlax-release-object HTML)
  17.   )
  18. )
  19. ;;;=================================================================*
  20. ;;函数测试
  21. (defun c:c2 ()
  22. (vl-load-com)
  23.   (setq ss (ssget '((0 . "*TEXT"))))
  24.   (setq i 0)
  25.   (setq last_stri_str "")
  26.   (repeat (sslength ss)
  27.   (setq txtcon (cdr (assoc 1 (entget (ssname ss i)))))
  28.   (setq txtcon_kuohao (strcat "(" txtcon ")"))

  29.   (setq last_stri   (vl-prin1-to-string txtcon_kuohao))
  30.   (setq last_stri_str (strcat last_stri_str last_stri))
  31. (setq i (1+ i))
  32. )

  33. (setq str0 (getvar "DwgName")       ;"宗地图.dwg" 这里图纸名称也不一定是这个,所以我改成这样
  34.         str0 (substr str0 1 )
  35. )       ;"宗地图"


  36.   (setq last_stri_str (vl-string-translate "/" "-" last_stri_str))
  37. (setq last_stri_str (vl-string-translate """ " " last_stri_str));;这里为什么不能把 \  替换成空呢。我现在只好替换成空格。。
  38. (setq str0 (vl-string-subst "" ".dwg"  str0))   ;;而这里又能把 .dwg 替换成空呢。
  39. (setq last_stri_str (strcat str0 last_stri_str))
  40. ;(setq last_stri_str (vl-string-subst "" " "  last_stri_str))    ;;;这句加进函数里面也不起作用。也不能替换空格成空。
  41.   (ZML-CLIP-SETSTRING last_stri_str)
  42.   (princ "\n文字已复制到剪切板,可以直接粘贴了!")
  43.   (princ)
  44. )


 楼主| 发表于 2011-12-6 15:05:00 | 显示全部楼层
Andyhon 发表于 2011-12-5 17:39
(defun c:c1 ()
  (vl-load-com)
  (princ "\n字串一: ")

其实现在的结果就是在命名的时候地号之间有两个空格,也不是很影响使用就是了。只是想弄明白为什么这个函数不能替换成空。。。。。
发表于 2011-12-6 15:15:28 | 显示全部楼层

  1. (defun c:c1 ()
  2.   (vl-load-com)
  3.   (princ "\n字串一: ")
  4.   (setq e1 (ssget ":S:E" '((0 . "*TEXT"))))
  5.   (princ "\n字串二: ")
  6.   (setq e2 (ssget ":S:E" '((0 . "*TEXT"))))
  7.   (setq str0 (getvar "DwgName")       ;"宗地图.dwg"
  8.         str0 (substr str0 1 (- (strlen str0) 4))          ;"宗地图"
  9.         str1 (cdr (assoc 1  (entget (ssname e1 0))))
  10.         str1 (vl-string-translate "/" "-"  str1)
  11.   )
  12.   (if e2          ; 字串二
  13.     (setq  str2 (cdr (assoc 1  (entget (ssname e2 0))))
  14.            str2 (vl-string-translate "/" "-"  str2)
  15.     )
  16.     (setq str2 nil)
  17.   )
  18.   (if str2
  19.     (setq strs (strcat str0 "(" str1 ")(" str2 ")")
  20.     (setq strs (strcat str0 "(" str1 ")"))
  21.   )
  22.   (princ "\n") (princ strs)(princ)
  23. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 02:03 , Processed in 0.194785 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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