kratki spoj 发表于 2022-7-5 23:32:36

使用文本编号进行操作

你好
我想知道是否有一个lisp可以增加选定文本中的数字。
例如:
 
1/1,1/2,1/3...到1/2,1/3,1/4。。。
 
所以,程序应该选择文本,然后递增或递减前缀或sufix。
感谢您的帮助。

BIGAL 发表于 2022-7-5 23:46:37

只是一个解决方案,将文本读取每个字符,直到找到“/”为止,然后读取其余字符,使用rtos将其还原为数字加1,将其转换为字符串并添加开始字符串。作为lisp“查找字符”的开始搜索,最常见的是CSV。

Lee Mac 发表于 2022-7-5 23:52:35

试试这个程序:文本增量

kratki spoj 发表于 2022-7-6 00:04:02

感谢您的回复。
@李·麦克
文本增量一次选择一个元素。如果你有从1到100左右的数字,这需要时间。
有没有一种方法可以同时选择所有元素?

Lee Mac 发表于 2022-7-6 00:14:36

 
试试这个快速模式:

;; 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)

kratki spoj 发表于 2022-7-6 00:22:23

谢谢李。这就是我想要的。

Lee Mac 发表于 2022-7-6 00:28:58

不客气!

bababarghi 发表于 2022-7-6 00:40:09

不确定这是否有助于解决问题。以下技巧在很大程度上取决于您的案例:
 
我通常会删除所有需要增加数字部分的文本实体。将单个图案复制到适当位置,然后利用AutoNumber(ExpressTools)的“查找和替换”选项。
 

 
在上述场景中,您只需要将“1/x”复制到所有所需的位置。在“查找和替换”中,键入“x”。
 
正如我所说,它可能并不总是对每个人都可行,但我经常使用它。
 
页: [1]
查看完整版本: 使用文本编号进行操作