倫到不行 发表于 2017-8-25 12:35:38

抓取mtext文字 遇到新的问题

本站高手写的抓取mtext文字
(defun c:tyu ()
(setq ent (car (entsel "\n选择MTEXT文字:")))
(setq dxf (entget ent))
(setq str0 "")
(setq txt (cdr (assoc 1 dxf)))
(setq txt (vl-string-subst "" "{" txt))
(setq txt (vl-string-subst "" "}" txt))
(while (setq n (vl-string-search ";" txt))
    (if (= (setq str (substr txt 1 1)) "\\")
      (setq txt (substr txt (+ n 2)))
      (progn
(setq str0 (strcat str0 (substr txt 1 1)))
(setq txt (substr txt 2))
      )
    )
)
(setq str0 (strcat str0 txt))
(princ (strcat "当前MTEXT中的文本为: " str0))
(princ)
)

可是有个小问题
例如:mtext里有
A:1111111
B:2222222
C:3333333
我想抓取C里面的文字
用(setq txt (substr txt (+ n 2))) 修改可以
但是一旦 A跟B 的文字改变长短
抓取C里面的文字 就会不正确
要如指定抓取?   请高手帮帮忙


yshf 发表于 2017-8-25 16:29:10

(setq txt (cdr (assoc 1 dxf)))
(setq Czfc (substr txt (+ (vl-string-search "C:" txt) 1))

xhlicaofen 发表于 2017-8-26 09:26:40

获取“:”前面的所有字符怎么写。

yshf 发表于 2017-8-26 09:29:27

(setq txt (cdr (assoc 1 dxf)))
(setq Czfc (substr txt 1 (vl-string-search "C:" txt) ))

倫到不行 发表于 2017-8-28 08:54:14

yshf 发表于 2017-8-26 09:29
(setq txt (cdr (assoc 1 dxf)))
(setq Czfc (substr txt 1 (vl-string-search "C:" txt) ))

非常感谢你…再跟你请教如果只要获取B:里面的内容 而其他内容不出现
要怎么修改

yshf 发表于 2017-8-28 21:02:03

(setq n1 (vl-string-search "B:" txt))
(setq n2 (vl-string-search "C:" txt))          
(setq Bzfc (substr txt (1+ n1) (- n2 n1)))
(setq Bzfc (vl-string-subst "" "\\P" Bzfc))
页: [1]
查看完整版本: 抓取mtext文字 遇到新的问题