fleshget 发表于 2022-7-6 12:22:31

需要“文本更改”lisp。

你好,
 
我需要一个关于文本更改的基本lisp。。
 
文本为:0+400.652
它变为:0+700.652
 
lisp将添加300
 
这里有一些例子:
 
0+600.000 -> 0+900.000
 
0+980.163 -> 1+280.163
 
 
有一个大的十字路口项目,我应该在KM文本中添加“300”米。。这么难做到:/
 
对不起,英语不好,谢谢你提前通知

ronjonp 发表于 2022-7-6 12:29:30

这应该做到:
(defun c:300 (/ ss)
(vl-load-com)
(if (setq ss (ssget '((0 . "text") (1 . "0+*"))))
   (foreach str (mapcar 'vlax-ename->vla-object
            (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
      )
   (vla-put-textstring
   str
   (strcat "0+" (rtos (+ 300 (atof (substr (vla-get-textstring str) 3))) 2 3))
   )
   )
)
(princ)
)

stevesfr 发表于 2022-7-6 12:34:41

 
 
不完全是这样:0+700不会变为1+000,而是变为0+1000

ronjonp 发表于 2022-7-6 12:37:44

 
这就是我早上写代码@3得到的。。。

ronjonp 发表于 2022-7-6 12:45:23

好啊我喝了咖啡,这似乎奏效了
 
(defun c:incsta    (/ int isreal lst newstr pos ss string)
(vl-load-com)
(if (setq ss    (ssget ":L" '((0 . "text") (1 . "*+*")))
       int    (getint "\nEnter increment amount: ")
   )
   (foreach str (mapcar 'vlax-ename->vla-object
            (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
      )
   (setq string (vla-get-textstring str)
       lst       (vl-string->list string)
       newstr (rtos (+ int (atof (apply 'strcat (mapcar 'chr (vl-remove 43 lst)))))
            2
            (if (setq isreal (vl-string-position 46 string))
            (strlen (substr string (+ 2 isreal)))
            0
            )
          )
       pos       (abs
            (+ (vl-string-position 43 string) (- (1+ (strlen newstr)) (strlen string)))
          )
       newstr (strcat (substr newstr 1 pos) "+" (substr newstr (1+ pos)))
       newstr (strcat (if (wcmatch newstr "+*")
                "0"
                ""
            )
            newstr
          )
   )
   (vla-put-textstring str newstr)
   )
)
(princ)
)

fleshget 发表于 2022-7-6 12:47:08

你把我从“三天工作”中解救出来。非常感谢你帮助我!你让我高兴极了,兄弟!
 
http://img191.imageshack.us/img191/205/beer.jpg
 
给你的电子啤酒
 
干杯,兄弟!
 
编辑:
 
伙计,有个问题。。如何使用此lisp?
 
输入命令,选择文本,输入金额,然后?
 
我现在正在使用2010,命令栏对我说:
 
Command: incsta

Select objects: Specify opposite corner: 2 found

Select objects:
Enter increment amount: 500

Pick a point to increment selected text: ; error: bad argument value:
non-negative: -2
 
文本为:60+380.000

ronjonp 发表于 2022-7-6 12:54:07

 
谢谢你的电子啤酒。。。你能把你正在画的画贴出来吗?我试过那个文本字符串,效果很好?
 
*编辑。。。。我想我可能已经修好了。。。我转发了上面的代码。试试看,让我知道。

fleshget 发表于 2022-7-6 12:56:39

我现在就试过了伙计。。
 
60+380.000至60+480
 
60+380.001至60+480.001
 
我想问题是“.000”。。

ronjonp 发表于 2022-7-6 13:02:19

 
我不能重复你的问题。。。。把你的画贴出来,我会把它整理好的。

ronjonp 发表于 2022-7-6 13:06:15

我想这一切都好吧?
页: [1] 2
查看完整版本: 需要“文本更改”lisp。