lisp删除最后一个字符
你好我见过lisp将字母添加到文本中,但我找不到通过窗口删除或跨越最后一个字母的lisp。请你帮我找到一个,如果它已经张贴或可能写一个给我。
非常感谢。 下面是一个简单的示例:
(defun c:FOO ( / ss)
(if (setq ss (ssget "_:L" '((0 . "TEXT"))))
((lambda (i / e ed s)
(while (setq e (ssname ss (setq i (1+ i))))
(setq ed (entget e))
(setq s (assoc 1 ed))
(setq ed (subst (cons 1 (substr (cdr s) 1 (1- (strlen (cdr s))))) s ed))
(entmod ed)))
-1)
(prompt "\n** Nothing selected ** "))
(princ))
这段代码可以变得更高效,但我保留了多个setq,以便您能够理解代码在每个步骤中所做的事情。 这很漂亮。
谢谢你RenderMan 函数*vl string right trim*也可以帮助您实现这一点。
例如
(vl-string-right-trim "456" "123456")
塔瓦特
不客气。
“vl字符串subst”也是如此:wink:(
(defun c:FOO ( / *error* oldNomutt ss oDoc s)
(vl-load-com)
(princ "\rFOO ")
(defun *error*(msg)
(and oldNomutt (setvar 'nomutt oldNomutt))
(if oDoc (vla-endundomark oDoc))
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat "\n** Error: " msg " ** ")))) ; Fatal error, display it
(princ))
(prompt "\nSelect text objects to remove last character: ")
(and (setq oldNomutt (getvar 'nomutt)) (setvar 'nomutt 1))
(if (setq ss (ssget "_:L" '((0 . "TEXT"))))
(progn
(vla-startundomark
(setq oDoc (vla-get-activedocument (vlax-get-acad-object))))
(vlax-for x(setq ss (vla-get-activeselectionset oDoc))
(setq s (vla-get-textstring x))
;|
(vla-put-textstring
x
(vl-string-subst
""
(substr s (strlen s) 1)
s)))
|;
(vla-put-textstring x (substr s 1 (1- (strlen s)))))
(vla-endundomark oDoc)
(vla-delete ss)
(setvar 'nomutt oldNomutt))
(progn
(setvar 'nomutt oldNomutt)
(prompt "\n** Nothing selected ** ")))
(princ))
伦德曼,我想你的意思是:
但是要小心使用这种方法。。。
(setq s "Renderman")
(vl-string-subst "" (substr s (strlen s)) s)
如果您只想删除特定数量的字符,vl string right trim也将是不可预测的。
我会使用substr,正如你在第一篇文章中所做的那样。
接得好,李。
代码已修订。 带有注释性文本的Subst和entmod将导致Cad出错。
很好的例程Renderman,为什么不把多行文字也包括在例程中呢。!
当做
塔瓦特
我不认识任何专业人士(例如,我工作的公司等),使用注释性对象。
谢谢
至于多行文字,从技术上讲,您可以将其添加到选择集过滤器,因为该点是修剪最后一个字符。然而,这可能正是我的工作方式,但我在文本中放置了不同类型的数据,就像多行文字一样。如果我需要删除多行文字文本字符串的最后一个字符,我永远不会有任何实际目的(或者至少想不出任何实际目的):
; TextString = "{\\C1;This\\P\\C2;is\\P\\C4;a\\P\\C6;test}"
给每一个人。
页:
[1]
2