明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1146|回复: 9

[提问] 如何删除多行文字中特定类型的字符?

[复制链接]
发表于 2020-3-9 10:44:53 | 显示全部楼层 |阅读模式
3明经币
如下图:
如何删除多行文字中特定类型的字符?
删除多行文字中的公差,公差值的颜色和字高不是固定的,但都是堆叠的



附件: 您需要 登录 才可以下载或查看,没有账号?注册
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2020-3-9 20:43:08 | 显示全部楼层
路过的大师指点一下啦
回复

使用道具 举报

发表于 2020-3-9 21:32:47 | 显示全部楼层
本帖最后由 1291500406 于 2020-3-10 09:53 编辑

{\\fSimSun|b0|i0|c134|p2;顶板}610×75{\\H0.5x;\\T0.95;\\C201;\\S+0.1^ 0;}×18{\\H0.5x;\\T0.95;\\C201;\\S+0.04^ 0;}

{\\fSimSun|b0|i0|c134|p2;顶板}610×75×18
;;测试
(vla-put-TextString (vlax-ename->vla-object (car (entsel))) "{\\fSimSun|b0|i0|c134|p2;顶板}610×75×18")

{\\fSimSun|b0|i0|c134|p2;顶板}610×75×18
移除定位字符串{\\H0.5x;\\T0.95;\\C201;\\S+0.04^ 0;}部分数据


_$ (vl-string-position (ascii"z") "azbdc")1_$ (vl-string-position 122"azbzc")1_$ (vl-string-position (ascii"x") "azbzc")nil
   
The search string used            in the following example contains two “z” characters. Reading            from left to right, with the first character being displacement            0, there is one z at displacement 1 and another z at displacement            3:         
         
_$ (vl-string-position (ascii"z") "azbzlmnqc")1

Searching from left to            right (the default), the “z” in position 1 is            the first one vl-string-position encounters.            But when searching from right to left, as in the following example,            the “z” in position 3 is the first one encountered:         
         
_$ (vl-string-position (ascii"z") "azbzlmnqc" nil t)3






回复

使用道具 举报

 楼主| 发表于 2020-3-10 09:00:38 | 显示全部楼层
1291500406 发表于 2020-3-9 21:32
{\\fSimSun|b0|i0|c134|p2;顶板}610×75{\\H0.5x;\\T0.95;\\C201;\\S+0.1^ 0;}×18{\\H0.5x;\\T0.95;\\C201 ...

太深奥了,看不懂啊
我发现,如果不理会汉字部分,只要把 {} 成对的 大括弧 里面的所有字符以及大括弧本身全部删除,这样应该容易一些吧?是不是要用正则呢?
回复

使用道具 举报

发表于 2020-3-10 09:24:05 | 显示全部楼层
       '删除堆迭格式
       'RE.Pattern = "\\S(.[^;]*)(\^|#|\\)(.[^;]*);"
       's = RE.Replace(s, "$1$3")
       '上标下标分开
       'RE.Pattern = "\\S(.[^;]*)(\^|#|\\);"
       's = RE.Replace(s, "$1")
       'RE.Pattern = "\\S\^(.[^;]*);"
       's = RE.Replace(s, "$1")
       '上下标分数一起
       'RE.Pattern = "\\S((.[^;]*)(\^|#|\\)|(\^|#|\\)(.[^;]*));"

用正则相当简单。{}是格式的意思,格式不仅仅是堆叠。
回复

使用道具 举报

发表于 2020-3-10 09:45:46 | 显示全部楼层
(defun c:tt (/ lst n name str t-string-separated txt)
        (defun T-string-separated (str del / lst pos)
                (if (/= str nil)
                        (progn
                                (while (setq pos (vl-string-search del str))
                                        (setq
                                                lst (cons (substr str 1 pos) lst)
                                                str (substr str (+ pos 1 (strlen del)))
                                        )
                                )
                                (reverse (cons str lst))
                        )
                )
        )
        (if (setq name(car (entsel)))
                (progn
                        (setq txt (vla-get-TextString (vlax-ename->vla-object name)))
                        (setq lst (T-string-separated txt "}"))
                        (setq n 0)
                        (foreach x lst
                                (if (= n 0)
                                        (setq str (substr x (+ (vl-string-search ";" x) 2)))
                                        (if (vl-string-search "{" x)
                                                (setq str (strcat str (car (T-string-separated x "{"))))
                                        )
                                )
                                (setq n (1+ n))
                        )
                )
        )
        str
)
回复

使用道具 举报

 楼主| 发表于 2020-3-10 10:14:58 | 显示全部楼层
mikewolf2k 发表于 2020-3-10 09:24
'删除堆迭格式
       'RE.Pattern = "\\S(.[^;]*)(\^|#|\\)(.[^;]*);"
       's = RE.Replace(s ...

谢谢 mikewolf2k 版,以前只在安卓系统的 tasker 里玩过一下正则,语法跟这个一样,只是在lsp里不知道要怎么写,还望多多指教
回复

使用道具 举报

 楼主| 发表于 2020-3-10 10:24:58 | 显示全部楼层
taoyi0727 发表于 2020-3-10 09:45
(defun c:tt (/ lst n name str t-string-separated txt)
        (defun T-string-separated (str del / lst pos ...

非常感谢 taoyi0727 大师的回复,这个效果可以,不知道是否方便改成通用一点的呢,因为公差和汉字的所在位置有时候会不一样

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2020-3-10 11:11:02 | 显示全部楼层
本帖最后由 taoyi0727 于 2020-3-10 11:27 编辑
669423907 发表于 2020-3-10 10:24
非常感谢 taoyi0727 大师的回复,这个效果可以,不知道是否方便改成通用一点的呢,因为公差和汉字的所在 ...

(defun c:tt (/ a ang color distance-pt height high last-name layer lst n name-new-pt name-pt obj pt ss str stylename t-string-separated txt)
        (defun T-string-separated (str del / lst pos)
                (if (/= str nil)
                        (progn
                                (while (setq pos (vl-string-search del str))
                                        (setq
                                                lst (cons (substr str 1 pos) lst)
                                                str (substr str (+ pos 1 (strlen del)))
                                        )
                                )
                                (reverse (cons str lst))
                        )
                )
        )
        (if (and
                                (setq ss (ssget '((0 . "MTEXT"))))
                                (setq pt (getpoint "\n请点取插入位置"))
                        )
                (progn
                        (setq a -1)
                        (repeat (sslength ss)
                                (setq obj (vlax-ename->vla-object (ssname ss (setq a (1+ a)))))
                                (setq name-pt (safearray-value (variant-value (vla-get-InsertionPoint obj))))
                                (setq color (vla-get-Color obj))
                                (setq Height (vla-get-Height obj))
                                (setq Layer (vla-get-Layer obj))
                                (setq StyleName (vla-get-StyleName obj))
                                (setq txt (vla-get-TextString obj))
                                (setq lst (T-string-separated txt "}"))
                                (setq n 0)
                                (foreach x lst
                                        (if (= n 0)
                                                (setq str (substr x (+ (vl-string-search ";" x) 2)))
                                                (if (vl-string-search "{" x)
                                                        (setq str (strcat str (car (T-string-separated x "{"))))
                                                )
                                        )
                                        (setq n (1+ n))
                                )
                                (if (not (and ang distance-pt))
                                        (progn
                                                (setq ang (angle name-pt pt))
                                                (setq distance-pt (distance name-pt pt))
                                        )
                                )
                                (setq name-new-pt (polar name-pt ang distance-pt))
                                (setq last-name (entlast))
                                (entmake (list
                                                                         '(0 . "MTEXT")
                                                                         '(100 . "AcDbEntity")
                                                                         '(100 . "AcDbMText")
                                                                         '(7 . "Standard")
                                                                         (cons 1 str)
                                                                         (cons 10 name-new-pt)
                                                                 )
                                )
                                (if (/= (entlast) last-name)
                                        (progn
                                                (setq obj (vlax-ename->vla-object (entlast)))
                                                (vla-put-StyleName obj StyleName)
                                                (vla-put-Color obj color)
                                                (vla-put-Height obj Height)
                                                (vla-put-Layer obj Layer)
                                        )
                                )
                        )
                )
        )
)

水平也只有这样了
不会正则

评分

参与人数 1明经币 +1 收起 理由
669423907 + 1 谢谢大师热情帮助

查看全部评分

回复

使用道具 举报

发表于 2020-3-10 11:19:52 | 显示全部楼层

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 07:55 , Processed in 0.249391 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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