ktbjx 发表于 2022-7-5 16:35:48

获取文本内容????

如何获取文本内容并将其作为我将要筛选的对象的高程?
 
(defun c:q1 (/ txt1 q1 ss)
(setq ss (ssget "_C" '((0 . "*TEXT"))))
   (cdr (assoc 1 (entget (ssname ss (setq txt1 0)))))

(prompt "\nSELECT OBJECTS")
(setq sss (ssget "_:L"))
(command"_.CHANGE" sss "" "_P" "_E" txt1)
)

tombu 发表于 2022-7-5 16:45:08

使用获取文本或多行文字内容
(setq txt(vla-get-TextString(vlax-ename->vla-object (car (entsel)))))
不知道你想用它做什么。

Grrr 发表于 2022-7-5 16:53:52

一些猜测:

(defun c:q1 ( / LeaveNumbersAndDots txt enx n SS )
(defun LeaveNumbersAndDots (str)
   (if (and (eq 'STR (type str)) (setq str (vl-remove-if-not '(lambda (c) (<= 46 c 57)) (vl-string->list str))) )
   (vl-list->string str)
   )
); defun LeaveNumbersAndDots
(cond
   ( (not (setq txt (car (entsel "\nPick text with numerical content: "))))
   (alert "\nNothing selected.")
   )
   ( (not (wcmatch (cdr (assoc 0 (setq enx (entget txt)))) "*TEXT"))
   (alert "\nThis is not a text.")
   )
   ( (not (numberp (setq n (read (setq txt (cdr (assoc 1 enx)))))))
   (alert
       (strcat "\nThis text has no full numerical content:
         \nCurrently it is: \"" txt "\"
         \nIt must be in the following format: \"" (cond ((LeaveNumbersAndDots txt)) ("123.4")) "\"."
       )
   )
   )   
   ( (not (and (princ "\nSelect objects to change their elevation: ") (setq SS (ssget "_:L"))))
   (alert "\nNothing selected.")
   )
   (
   (mapcar
       '(lambda (enx)
         (cond
         ( (assoc 38 enx) (entmod (append enx (list (cons 38 n)))) )
         ( (entmod (mapcar '(lambda (x) (if (member (car x) '(10 11)) (reverse (cons n (cdr (reverse x)))) x) ) enx)) )
         )
       )
       (mapcar 'entget (apply 'append (mapcar '(lambda (x) (if (= 3 (car x)) (list (cadr x)))) (ssnamex SS))))
   )
   )
); cond
(princ)
); defun

Tharwat 发表于 2022-7-5 17:00:24

 
你好
 
您的警告语句并不完全正确,因为numberp函数将为此类字符串返回nil。例如:“abc123”

(defun HasNoNumber-p (str)
(not (vl-some '(lambda (no) (< 47 no 57)) (vl-string->list str)))
)

Grrr 发表于 2022-7-5 17:10:12

嗨,塔瓦,
是的:我的目的是只检查文本内容中的数字字符(我认为这是必需的格式)。
是的,我的警告信息并不完全正确(由于缺乏英语)。
 
无论如何,就像你说的,文本内容可以重新格式化:

; _$ (LeaveNumbers "Leave 251, 900 and 841 numbers please.") -> "251900841"
(defun LeaveNumbers (str)
(apply 'strcat (mapcar 'chr (vl-remove-if-not '(lambda (c) (< 47 c 58)) (vl-string->list str))))
)
 

Tharwat 发表于 2022-7-5 17:15:14

我猜这条线索和这条有某种联系

Tharwat 发表于 2022-7-5 17:21:28

 
两者都是正确的,但篇幅较短且直接。

(defun LeaveNumbers (str)
(vl-list->string (vl-remove-if-not '(lambda (c) (< 47 c 58)) (vl-string->list str)))
)

ktbjx 发表于 2022-7-5 17:30:54

 
 
非常感谢。
我试过了,只更改了多段线高程,但没有更改线(起点z终点z)、引线(顶点z)、文字(位置z)。如何将其添加到您的lisp中?我不想破坏你的密码

Grrr 发表于 2022-7-5 17:42:53

 
我已经修改了第#3篇文章中的代码,应该可以更好地工作——但我不能保证它是完美的。
页: [1]
查看完整版本: 获取文本内容????