如何提取多行文字里面的内容
请问大神,我如何把{和; 之间的内容删掉啊,字符串如下:
14123{\fArial Black|b0|i0|c0|p34;1+63}3.036
本帖最后由 llsheng_73 于 2014-12-16 14:55 编辑
(defun mtext2txt(s / ob)
(vlax-put-property(setq ob(vlax-create-object"Vbscript.RegExp"))"IgnoreCase"0)
(vlax-put-property ob "Global" 1)
(setq s(mapcar'(lambda(x y)(vlax-put-property ob"Pattern"x)(setq s(vlax-invoke-method ob"Replace"s y)))
'("\\\\\\\\""\\\\{""\\\\}""\\\\pi(.[^;]*);""\\\\pt(.[^;]*);""\\\\S(.[^;]*)(\\^|#|\\\\)(.[^;]*);"
"(\\\\F|\\\\f|\\\\C|\\\\H|\\\\T|\\\\Q|\\\\W|\\\\A)(.[^;]*);""(\\\\L|\\\\O|\\\\l|\\\\o)""\\\\~"
"\\\\P" "\n" "({|})" "\\x01" "\\x02" "\\x03")(list(CHR 1)(CHR 2)(CHR 3)"""""""""""" (chr 13) "" "" "\\" "{" "}")))
(if ob(vlax-release-object ob))
(last s))
这是根据MCCAD的修改的,其中换行符替换为(chr 13)是因为我有特殊用途,如果用不着,可以把它替换为"" llsheng_73 发表于 2014-12-16 14:53
这是根据MCCAD的修改的,其中换行符替换为(chr 13)是因为我有特殊用途,如果用不着,可以把它替换为""
如果多行文字设置了行间距,代码提取会出错,在你的基础上修改了一下,可以测试一下
;;测试文件
(defun C:test2()
(mtext2txt2 (vlax-get (vlax-ename->vla-object (car(entsel "\n选择多行文字"))) 'TextString))
)
;;说明:提取多行文字的内容(去除所有格式)
;;参数:s:多行文字的值
;;返回:string
;;换行符替换为""(如果想替换成其他值,修改倒数第4行的 “(chr 0)”为其他值)
;;在llsheng_73的基础上修改,参考http://bbs.mjtd.com/forum.php?mod=viewthread&tid=112421
(defun mtext2txt2(s / ob)
(vlax-put-property (setq ob(vlax-create-object"Vbscript.RegExp")) "IgnoreCase" 0)
(vlax-put-property ob "Global" 1)
(setq s (mapcar '(lambda(x y)(vlax-put-property ob"Pattern"x) (setq s (vlax-invoke-method ob "Replace" s y)))
'("\\\\\\\\""\\\\{""\\\\}""\\\\p(.[^;]*);""\\\\S(.[^;]*)(\\^|#|\\\\)(.[^;]*);"
"(\\\\F|\\\\f|\\\\C|\\\\H|\\\\T|\\\\Q|\\\\W|\\\\A)(.[^;]*);""(\\\\L|\\\\O|\\\\l|\\\\o)""\\\\~"
"\\\\P" "\n" "({|})" "\\x01" "\\x02" "\\x03")(list (CHR 1) (CHR 2) (CHR 3)"" "" "" "" "" (chr 0) "" "" "\\" "{" "}")))
(if ob (vlax-release-object ob))
(last s)
)
对于Mtxet,建议如下,这样你就不用去除前面的控制符了
(setq obj(vlax-ename->vla-object e))
(setq tex (vlax-get obj 'TextString)) 论坛里有发过,仔细找找 llsheng_73 发表于 2014-12-16 14:53 static/image/common/back.gif
这是根据MCCAD的修改的,其中换行符替换为(chr 13)是因为我有特殊用途,如果用不着,可以把它替换为""
强,如果要保留图片所示的公差内容呢?
页:
[1]