文本前后缀操作,含只有一行的多行文字
本帖最后由 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)
)
)
)
)
friendship 发表于 2021-4-22 23:41
谢谢楼主。
有一个小建议
如果可以选择删除前后缀就好了,按字符数量进行删除
如果通用性,这不好,其他人用易导致误操作 tryhi 发表于 2021-4-25 09:35
而且我还加了删除前后固定数量的功能
根还没体会过这个需求,据使用环境需求慢慢改进吧 本帖最后由 wzg356 于 2021-4-22 18:44 编辑
tryhi 发表于 2021-4-22 16:58
不错,我也曾经仿写了一个,不过我过滤了重复刷,同一个文字刷第二次无效
好建议
。。。。。。。。。。。
不错,我也曾经仿写了一个,不过我过滤了重复刷,同一个文字刷第二次无效 谢谢楼主。
有一个小建议
如果可以选择删除前后缀就好了,按字符数量进行删除 支持支持楼主佩服你们想写就能写出来的大神 完美...................................................................!!!!!!! wzg356 发表于 2021-4-22 18:43
好建议
。。。。。。。。。。。
而且我还加了删除前后固定数量的功能 wzg356 发表于 2021-4-25 15:54
如果通用性,这不好,其他人用易导致误操作
通用性应该挺好的啊
页:
[1]
2