使用文本编号进行操作
你好我想知道是否有一个lisp可以增加选定文本中的数字。
例如:
1/1,1/2,1/3...到1/2,1/3,1/4。。。
所以,程序应该选择文本,然后递增或递减前缀或sufix。
感谢您的帮助。 只是一个解决方案,将文本读取每个字符,直到找到“/”为止,然后读取其余字符,使用rtos将其还原为数字加1,将其转换为字符串并添加开始字符串。作为lisp“查找字符”的开始搜索,最常见的是CSV。 试试这个程序:文本增量 感谢您的回复。
@李·麦克
文本增量一次选择一个元素。如果你有从1到100左右的数字,这需要时间。
有没有一种方法可以同时选择所有元素?
试试这个快速模式:
;; Text Increment-Lee Mac
;; Increments numerical data found in a selection of Text or MText
;; objects by a value specified by the user.
(defun c:txtinc ( / e i l s x )
(if (null *inc*)
(setq *inc* 1.0)
)
(if (setq i (getreal (strcat "\nSpecify Increment <" (rtos *inc* 2) ">: ")))
(setq *inc* i)
)
(if (equal 0.0 (rem *inc* 1) 1e-8)
(setq *inc* (fix *inc*))
)
(if (setq s (ssget "_:L" '((0 . "TEXT,MTEXT") (1 . "*#*"))))
(repeat (setq i (sslength s))
(setq e (entget (ssname s (setq i (1- i))))
x (assoc 1 e)
)
(entmod
(subst
(cons 1
(apply 'strcat
(mapcar
(function
(lambda ( x )
(if (and (= 'int (type x)) (= 'int (type *inc*)))
(itoa (+ x *inc*))
(if (member (type x) '(int real))
(rtos (+ x *inc*) 2)
x
)
)
)
)
(LM:splitstring (cdr x))
)
)
)
x e
)
)
)
)
(princ)
)
;; Split String-Lee Mac
;; Splits a string into a list of text and numbers
(defun LM:splitstring ( s )
(
(lambda ( l )
(read
(strcat "("
(vl-list->string
(apply 'append
(mapcar
(function
(lambda ( a b c )
(cond
( (= 92 b)
(list 32 34 92 b 34 32)
)
( (or (< 47 b 58)
(and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
(and (= 46 b) (< 47 a 58) (< 47 c 58))
)
(list b)
)
( (list 32 34 b 34 32))
)
)
)
(cons nil l) l (append (cdr l) (list nil))
)
)
)
")"
)
)
)
(vl-string->list s)
)
)
(princ) 谢谢李。这就是我想要的。 不客气! 不确定这是否有助于解决问题。以下技巧在很大程度上取决于您的案例:
我通常会删除所有需要增加数字部分的文本实体。将单个图案复制到适当位置,然后利用AutoNumber(ExpressTools)的“查找和替换”选项。
在上述场景中,您只需要将“1/x”复制到所有所需的位置。在“查找和替换”中,键入“x”。
正如我所说,它可能并不总是对每个人都可行,但我经常使用它。
页:
[1]