乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 65|回复: 19

[编程交流] lisp删除最后一个字符

[复制链接]

4

主题

13

帖子

9

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 06:56:33 | 显示全部楼层 |阅读模式
你好
我见过lisp将字母添加到文本中,但我找不到通过窗口删除或跨越最后一个字母的lisp。请你帮我找到一个,如果它已经张贴或可能写一个给我。
非常感谢。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:01:54 | 显示全部楼层
下面是一个简单的示例:
 
  1. (defun c:FOO ( / ss)
  2. (if (setq ss (ssget "_:L" '((0 . "TEXT"))))
  3.    ((lambda (i / e ed s)
  4.       (while (setq e (ssname ss (setq i (1+ i))))
  5.         (setq ed (entget e))
  6.         (setq s (assoc 1 ed))
  7.         (setq ed (subst (cons 1 (substr (cdr s) 1 (1- (strlen (cdr s))))) s ed))
  8.         (entmod ed)))
  9.      -1)
  10.    (prompt "\n** Nothing selected ** "))
  11. (princ))

 
这段代码可以变得更高效,但我保留了多个setq,以便您能够理解代码在每个步骤中所做的事情。
回复

使用道具 举报

4

主题

13

帖子

9

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 07:05:45 | 显示全部楼层
这很漂亮。
谢谢你RenderMan
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 07:06:21 | 显示全部楼层
函数*vl string right trim*也可以帮助您实现这一点。
例如
 
  1. (vl-string-right-trim "456" "123456")

 
塔瓦特
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:09:36 | 显示全部楼层
 
不客气。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:15:19 | 显示全部楼层
 
“vl字符串subst”也是如此:wink:(
 
  1. (defun c:FOO ( / *error* oldNomutt ss oDoc s)
  2. (vl-load-com)
  3. (princ "\rFOO ")
  4. (defun *error*  (msg)
  5.    (and oldNomutt (setvar 'nomutt oldNomutt))
  6.    (if oDoc (vla-endundomark oDoc))
  7.    (cond ((not msg))                                                   ; Normal exit
  8.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  9.          ((princ (strcat "\n** Error: " msg " ** "))))                 ; Fatal error, display it
  10.    (princ))
  11. (prompt "\nSelect text objects to remove last character: ")
  12. (and (setq oldNomutt (getvar 'nomutt)) (setvar 'nomutt 1))
  13. (if (setq ss (ssget "_:L" '((0 . "TEXT"))))
  14.    (progn
  15.      (vla-startundomark
  16.        (setq oDoc (vla-get-activedocument (vlax-get-acad-object))))
  17.      (vlax-for x  (setq ss (vla-get-activeselectionset oDoc))
  18.        (setq s (vla-get-textstring x))
  19.        [color=green];|[/color]
  20. [color=green]        (vla-put-textstring[/color]
  21. [color=green]          x[/color]
  22. [color=green]          (vl-string-subst[/color]
  23. [color=green]            ""[/color]
  24. [color=green]            (substr s (strlen s) 1)[/color]
  25. [color=green]            s)))[/color]
  26. [color=green]            |;[/color]
  27.        [color=blue](vla-put-textstring x (substr s 1 (1- (strlen s)))))[/color]
  28.      (vla-endundomark oDoc)
  29.      (vla-delete ss)
  30.      (setvar 'nomutt oldNomutt))
  31.    (progn
  32.      (setvar 'nomutt oldNomutt)
  33.      (prompt "\n** Nothing selected ** ")))
  34. (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:18:24 | 显示全部楼层
伦德曼,我想你的意思是:
 
但是要小心使用这种方法。。。
 
  1. (setq s "Renderman")
  2. (vl-string-subst "" (substr s (strlen s)) s)

 
如果您只想删除特定数量的字符,vl string right trim也将是不可预测的。
 
我会使用substr,正如你在第一篇文章中所做的那样。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:20:44 | 显示全部楼层
 
接得好,李。
 
代码已修订。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 07:23:53 | 显示全部楼层
带有注释性文本的Subst和entmod将导致Cad出错。
 
很好的例程Renderman,为什么不把多行文字也包括在例程中呢。!
 
当做
 
塔瓦特
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:25:19 | 显示全部楼层
 
我不认识任何专业人士(例如,我工作的公司等),使用注释性对象。
 
 
谢谢
 
至于多行文字,从技术上讲,您可以将其添加到选择集过滤器,因为该点是修剪最后一个字符。然而,这可能正是我的工作方式,但我在文本中放置了不同类型的数据,就像多行文字一样。如果我需要删除多行文字文本字符串的最后一个字符,我永远不会有任何实际目的(或者至少想不出任何实际目的):
 
  1. ;   TextString = "{\\C1;This\\P\\C2;is\\P\\C4;a\\P\\C6;test}"

 
给每一个人。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 10:11 , Processed in 0.584015 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表