需要“文本更改”lisp。
你好,我需要一个关于文本更改的基本lisp。。
文本为:0+400.652
它变为:0+700.652
lisp将添加300
这里有一些例子:
0+600.000 -> 0+900.000
0+980.163 -> 1+280.163
有一个大的十字路口项目,我应该在KM文本中添加“300”米。。这么难做到:/
对不起,英语不好,谢谢你提前通知 这应该做到:
(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)
)
不完全是这样:0+700不会变为1+000,而是变为0+1000
这就是我早上写代码@3得到的。。。 好啊我喝了咖啡,这似乎奏效了
(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)
) 你把我从“三天工作”中解救出来。非常感谢你帮助我!你让我高兴极了,兄弟!
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
谢谢你的电子啤酒。。。你能把你正在画的画贴出来吗?我试过那个文本字符串,效果很好?
*编辑。。。。我想我可能已经修好了。。。我转发了上面的代码。试试看,让我知道。 我现在就试过了伙计。。
60+380.000至60+480
60+380.001至60+480.001
我想问题是“.000”。。
我不能重复你的问题。。。。把你的画贴出来,我会把它整理好的。 我想这一切都好吧?
页:
[1]
2