明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2247|回复: 19

[资源] 文本前后缀操作,含只有一行的多行文字

[复制链接]
发表于 2021-4-22 16:32 | 显示全部楼层 |阅读模式
本帖最后由 wzg356 于 2021-4-22 18:54 编辑

以前用贱人的,因系统冲突,模仿写了一个

不搞下载了,觉得有用,用的上的回复长点气气

采纳海狮的好建议,同一文字只能刷一次

命令qhz

;仿贱人前后缀
;(qianhouzhuiset)
(defun qianhouzhuiset ( / get_date lst_str str file f dcl_id dd);通过对话框设置参数
(defun get_date ()(mapcar 'get_tile(list "qz" "qztx" "hz" "hztx")))
(setq lst_str '(
"qianhouzhuidcl:dialog {label = \"前后缀\" ;"
"    :boxed_column {label = \"选项\" ;"
"        :row{:toggle {key = \"qz\" ;label = \"前缀\" ;}"
"             :edit_box {edit_width = 30 ;key = \"qztx\" ;}}"
"        :row{:toggle {key = \"hz\" ;label = \"后缀\" ;}"
"             :edit_box {edit_width = 30 ;key = \"hztx\" ;}}"
"    }"
"   :row{: button{label = \"加前后缀\";key = \"button1\";}"
"        : button{label = \"删前后缀\";key = \"button2\";}"
"         cancel_button;}"
"    :text {label = \"by wzg356/QQ1047048660 20210416\" ;}}"
      )
    )
    (setq file (vl-filename-mktemp "DclTemp.dcl"))
    (setq f (open file "w"))
    (foreach str lst_str(princ "\n" f)(princ str f))
    (close f)
    (or qianhouzhuidata(setq qianhouzhuidata(list "1" "前缀" "0" "后缀")));全局变量
(setq dcl_id (load_dialog file))
(new_dialog "qianhouzhuidcl" dcl_id "3" Pset_qhzdate)
(mapcar '(lambda (x y) (set_tile x y))(list "qz" "qztx" "hz" "hztx")qianhouzhuidata)
(action_tile "button1" "(setq qianhouzhuidata(get_date))(setq Pset_qhzdate(done_dialog 1)))")
(action_tile "button2" "(setq qianhouzhuidata(get_date))(setq Pset_qhzdate(done_dialog 2)))")  
(setq dd (start_dialog))
(unload_dialog dcl_id)
(vl-file-delete file);删除临时dcl文件
(cond((= 1 dd)(cons "+" qianhouzhuidata))((= 2 dd)(cons "-" qianhouzhuidata))(t nil))  
)
(defun c:qhz()(setq qhzset(qianhouzhuiset))(qianhouzhui qhzset)(princ))
;qhzset固定格式,对话框输出的
(defun qianhouzhui(qhzset / qhz- data ss txtls qz hz)
(defun qhz- (str str1 str2)
  (if(wcmatch str (strcat str1 "*"))(setq str(substr str(1+(strlen str1)))))
  (if(wcmatch str (strcat "*"  str2))(setq str(substr str 1(- (strlen str)(strlen str2)))))
  str
)
(sssetfirst);防已选误操作
(setq ss0(ssadd))
(while
  (setq ss(ssget ":S" '((0 . "*TEXT")
   (-4 . "<NOT")(1 . "*\\P*")(-4 . "NOT>")
   (-4 . "<NOT")(1 . "*\n*")(-4 . "NOT>")
   (-4 . "<NOT")(1 . "*\t*")(-4 . "NOT>")
  )));只有一行的文字
  (setq ss(mapcar 'cadr (ssnamex ss)))
  (setq ss(vl-remove-if '(lambda(x)(/= (type x) 'ENAME))ss));变图元名表
  (setq ss(vl-remove-if '(lambda(x)(ssmemb x ss0))ss));不在ss0的  
  (cond(ss(mapcar '(lambda(x)(setq ss0(ssadd x ss0))) ss);加入ss0
    (setq ss(mapcar 'vlax-ename->vla-object ss));对象集
    (setq txtls(mapcar 'vla-get-textstring ss));字符串表
    (setq qz(if(= "1"(nth 1 qhzset))(nth 2 qhzset)""))
    (setq hz(if(= "1"(nth 3 qhzset))(nth 4 qhzset)""))
    (if(= "+" (car qhzset))
     (setq txtls(mapcar '(lambda(x)(strcat qz x hz))txtls))
     (setq txtls(mapcar '(lambda(x)(qhz- x qz hz))txtls))
    )
    (mapcar '(lambda(x y)(vla-put-textstring x y))ss txtls)
   )
  )
)
)


评分

参与人数 1明经币 +1 收起 理由
tryhi + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2021-4-25 15:54 | 显示全部楼层
friendship 发表于 2021-4-22 23:41
谢谢楼主。
有一个小建议
如果可以选择删除前后缀就好了,按字符数量进行删除

如果通用性,这不好,其他人用易导致误操作
 楼主| 发表于 2021-4-25 15:48 | 显示全部楼层
tryhi 发表于 2021-4-25 09:35
而且我还加了删除前后固定数量的功能

根还没体会过这个需求,据使用环境需求慢慢改进吧
 楼主| 发表于 2021-4-22 18:43 | 显示全部楼层
本帖最后由 wzg356 于 2021-4-22 18:44 编辑
tryhi 发表于 2021-4-22 16:58
不错,我也曾经仿写了一个,不过我过滤了重复刷,同一个文字刷第二次无效

好建议
。。。。。。。。。。。
发表于 2021-4-22 16:58 | 显示全部楼层
不错,我也曾经仿写了一个,不过我过滤了重复刷,同一个文字刷第二次无效
发表于 2021-4-22 23:41 | 显示全部楼层
谢谢楼主。
有一个小建议
如果可以选择删除前后缀就好了,按字符数量进行删除
发表于 2021-4-23 08:31 | 显示全部楼层
支持支持楼主  佩服你们想写就能写出来的大神
发表于 2021-4-25 09:35 | 显示全部楼层
wzg356 发表于 2021-4-22 18:43
好建议
。。。。。。。。。。。

而且我还加了删除前后固定数量的功能
发表于 2021-5-13 21:09 | 显示全部楼层
wzg356 发表于 2021-4-25 15:54
如果通用性,这不好,其他人用易导致误操作

通用性应该挺好的啊

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-4-27 08:18 , Processed in 2.281268 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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