找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1040|回复: 10

[LISP程序]:求文字中包含的数字的和

[复制链接]
发表于 2003-8-22 15:26:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  1. ;;;求所选文字中包含的数字和
  2. ;;;应用范围:支持MTEXT/TEXT
  3. ;;;有效性:只对每个字段里包含一个数字的字段有效
  4. ;;;支持文字中非小数点的点存在
  5. ;;;制作:SNSJ
  6. ;;;nbs.lsp
  7. (defun c:nbs (/ apple_ss apple_sl js apple_nil apple_getpt apple_ssn apple_nss apple_txtsz
  8.                 apple_nmss apple_nmbss apple_strl apple_sub apple_getn apple_nbs)
  9. (setq apple_ss (ssget'((-4 . "< OR") (0 . "text") (0 . "mtext") (-4 . "OR >")))      
  10.       )
  11.   (cond
  12.     ((null apple_ss)(princ"\n###---选择的字体为空---#")
  13.      (exit))
  14.     )
  15.       (setq
  16.       apple_sl (sslength apple_ss)
  17.       js 0
  18.       apple_nil '()
  19.       )
  20.   (setq apple_getpt (getpoint "\n$选择插入计算结果的点$:")
  21.         )
  22.     (if (null apple_oldnb)
  23.     (setq apple_oldnb 100)
  24.     )
  25.   (initget (+ 2 4))
  26.   (setq apple_txtsz (getreal(strcat "\n&输入文字高度(" (rtos apple_oldnb) ")&:")
  27.                             )
  28.         )
  29.   (if (null apple_txtsz)
  30.     (setq apple_txtsz  apple_oldnb)   
  31.      (setq apple_oldnb  apple_txtsz)     
  32.       )
  33.         (cond
  34.           ((null apple_getpt)(princ"\n###---函数被取消---###")
  35.            (exit)
  36.            )
  37.           )   
  38. (repeat apple_sl
  39.   (setq apple_ssn (ssname apple_ss js)
  40.         apple_nil (cons apple_ssn apple_nil)
  41.         )
  42.   (setq js (+ js 1))
  43.   )
  44. (setq apple_nss (reverse apple_nil))
  45. (setq apple_nmss
  46. (mapcar
  47.   '(lambda (x)
  48.      (vla-get-textstring(vlax-ename->vla-object x)
  49.        )
  50.      )
  51.   apple_nss
  52.   )
  53.       )
  54. (setq apple_nmbss
  55. (mapcar
  56.   '(lambda (y)      
  57. (setq apple_strl (strlen y)
  58.       i 1
  59.       c '())
  60. (repeat apple_strl  
  61.   (setq apple_sub (substr y i 1))  
  62.   
  63.   (if (or(and(<= (ascii apple_sub) 57) (>= (ascii apple_sub) 48)
  64.               )
  65.          (= (ascii apple_sub) 46)
  66.              )
  67.     (setq c (cons apple_sub c))   
  68.     )
  69.   (setq i (+ i 1))
  70.   )
  71. (setq c (reverse c))
  72. (setq apple_nbs (apply 'strcat c)
  73.       )
  74. (setq apple_nbs (vl-string-left-trim "." apple_nbs))
  75. (setq apple_getn (vl-string-right-trim "." apple_nbs))  
  76.           (atof apple_getn)
  77.           )   
  78.   apple_nmss
  79.   )
  80. )
  81. (setq apple_nbs (vl-princ-to-string(apply '+ apple_nmbss)
  82.                      )
  83.       )
  84.   (command ".text" apple_getpt apple_txtsz "" apple_nbs)
  85.   (princ"\n###---所选数的和为:")
  86.   (princ apple_nbs)
  87.   (princ "---###")
  88.   (princ)
  89.   )


下载地址:http://www.xdcad.net/modrator/fi ... 0822152903_wzjs.swf

<embed src=http://www.xdcad.net/modrator/file_upload/4508/20030822152903_wzjs.swf quality=high width=400 height=300 loop=true type="application/x-shockwave-flash">
</embed>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-1-4 01:18:34 | 显示全部楼层
好,我用了,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-1-4 20:13:17 | 显示全部楼层
拷贝使用时,(ssget'((-4 . "《OR") (0 . "text") (0 . "mtext") (-4 . "OR》")))
"《OR" "OR》" 应改为半角. 另外也可改写为: (ssget '((0 . "*TEXT")))
程序还可简化
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-1-4 21:31:44 | 显示全部楼层
谢谢指点,半角和全角的问题是为了显示完全,否则无法显示出代码,(ssget '((0 . "*TEXT")))提的好谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-1-4 21:55:22 | 显示全部楼层
不客气,看看我的另外一贴。也是写文本求和的。支持选择集文本中多个数字。
http://www.xdcad.net/forum/showt ... amp;threadid=134245
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-1-15 00:48:06 | 显示全部楼层
snsj  斑竹,我基本不懂lisp,请不要见笑。在使用你的程序时出现下面的问题,该如何解决?请指点,谢谢。
Command: nbs
Select objects: Specify opposite corner: 2 found
Select objects: 1 found, 3 total
Select objects:
$选择插入计算结果的点$:
&输入文字高度(100)&:
; error: no function definition: VLAX-ENAME->VLA-OBJECT
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-1-17 03:37:05 | 显示全部楼层
上面的没加(vl-load-all)
下面的是最修版本,基本上解决了所有多行文本出现的问题

  1. ;;;--------------------求所选文字中包含的数字和---------------------;;;
  2. ;;;---------------------应用范围:支持MTEXT/TEXT---------------------;;;
  3. ;;;--------------有效性:对每个字段里包含多个数字的字段有效----------;;;
  4. ;;;-----支持负数、非小数点的其他点存在,支持多行文本中不同字体------;;;
  5. ;;;----------------本程序可自由使用,转载请注明出处-----------------;;;
  6. ;;;--------------------------制作:SNSJ 2004.1.15--------------------;;;
  7. ;;;---------------------------nbs.lsp-------------------------------;;;
  8. (defun c:nbs(/ apple_txt nl apple_nl apple_kkj apple_getstr apple_hb1
  9.                apple_hb0 apple_nl x y z apple_wz apple_wz1 zkh zkh1
  10.                apple_newjd obj qq nb nb1)
  11. (vl-load-com)
  12.   (princ "\n***&对选中文字求和程序&制作:SNSJ***")
  13. (setq apple_txt nil nl nil apple_nl nil apple_kkj nil apple_getstr nil)
  14. (if (ssget '((0 . "* TEXT")))
  15.     (vlax-for obj (vla-get-activeselectionset
  16.                     (vla-get-activedocument (vlax-get-acad-object)))
  17.       (setq apple_txt (cons(strcat(vla-get-textstring obj) "*")apple_txt))
  18.             )
  19.       )
  20. (setq apple_hb (vl-catch-all-apply 'strcat apple_txt))
  21.   (while  (vl-string-search "\\P" apple_hb)
  22. (setq apple_hb (vl-string-subst "*" "\\P"  apple_hb))
  23. )
  24. (setq apple_hb0 apple_hb)
  25. (while
  26.   (setq nb (vl-string-search "{" apple_ hb)
  27.         nb1 (vl-string-search "}" apple_hb))
  28.   (setq nl (cons (substr apple _hb (+ nb 1) (- nb1 (- nb 1))) nl))
  29.   (setq apple_hb (substr apple_hb (+ nb1 2)))
  30.   )
  31. (setq apple_hb1 (vl-catch-all-apply 'strcat nl))
  32. (mapcar
  33.   '(lambda (x)
  34.     (setq apple_hb0 (vl-string-subst  " " x apple_hb0))
  35.      )  nl
  36.   )
  37. (while
  38.    (setq apple_wz (vl-string-search  ";" apple_hb1))
  39.    (setq apple_hb1 (substr apple_hb1 (+ apple_wz 2)))
  40.    (setq zkh (vl-string-search "}" apple_hb1))
  41.    (setq zkh1 (vl-string-search "\" apple_hb1)
  42.          )
  43.   (cond
  44.     ((null zkh1)(setq qq zkh))
  45.     (t (setq qq (min zkh zkh1)))
  46.     )
  47.   (setq apple_nl (cons (substr apple_hb1 1 (+ qq 1)) apple_nl))
  48.         (setq apple_hb1 (substr apple_hb1 (+ qq 2)))
  49.        )
  50. (setq apple_nl (cons apple_hb0 apple_ nl))
  51. (setq apple_nl (vl-catch-all-apply 'strcat apple_nl))
  52. (mapcar '(lambda (y)
  53.           (if (not(or(and(<= y 57) (>= y 48)) (= y 46) (= y 45)))
  54.             (setq y 32))
  55.            (setq apple_kkj (cons y apple_kkj)))
  56.         (vl-string->list apple_nl)
  57.         )
  58. (setq apple_ kkj (vl-string-trim " " (vl-list->string (reverse  apple_kkj))))
  59. (while      
  60.     (setq apple_wz1 (vl-string-search " " apple_kkj))
  61.    (setq apple_getstr (cons (substr  apple_kkj 1  apple_wz1) apple_getstr))
  62. (setq apple_kkj (vl-string-trim " "(substr apple_kkj (+ apple_wz1 2))))
  63.    )
  64. (setq apple_ getstr
  65.   (mapcar
  66.   '(lambda (z)
  67.      (atof z)
  68.            )
  69.      (vl-remove "." (vl-remove "-"(cons apple_kkj apple_getstr))))
  70.      )
  71.   (setq apple_jsjg (vl-catch-all-apply '+ apple_getstr))
  72.   (princ "\n&所选文字中数字的和为&:")
  73.   (princ apple_jsjg)
  74. (cond ((null apple_oldjd) (setq apple_oldjd 2)))
  75.    (initget 4)
  76.       (setq apple_ newjd (getint(strcat "\n&输入计算精度&<" (rtos apple_oldjd) ">")))
  77.       (if (not apple_newjd)
  78.         (setq apple_ newjd apple_ oldjd)(setq apple_oldjd apple_newjd)
  79.         )
  80. (vl-cmdf ".text" (getpoint "\n&计算结果插入点&:")(getdist "\n&输入字高&:") "" (rtos apple _jsjg 2 apple_newjd))
  81. (princ)
  82.   )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-6-15 11:17:12 | 显示全部楼层
好用谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-6-15 11:59:39 | 显示全部楼层
最初由 陌生人 发布
[B]不客气,看看我的另外一贴。也是写文本求和的。支持选择集文本中多个数字。
http://www.xdcad.net/forum/showt ... amp;threadid=134245 [/B]


您的程序好使、简练,比楼主的好,就是提问过多,可以按图中数字的文字大小,数字精度确认。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-16 09:56:34 | 显示全部楼层
我也遇到6楼的问题,有没有高手解决一下?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-16 11:24:26 | 显示全部楼层
只实用与2000以上版本
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 02:43 , Processed in 0.400414 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表