找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 548|回复: 6

[LISP函数]:一段LSP,有点问题,各位帮助看看调一下

[复制链接]
发表于 2005-3-3 11:58:12 | 显示全部楼层 |阅读模式

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

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

×
程序是长老[陌生人]的,一直找不到他老人家;加了点东西,就调不出来,各位看看:
;|(sj)= 选用;----------------------------------------------------------------陌生人.2004.1
;v1.1 2004.1.对mtext的bug修正。消除重复符号;支持-.5写法,排除"写.法" ".." "+-";
功能:对选集中文本进行所有数字计算,支持一个text,mtext中有多个数字字符串,支持字符串中

小数,负数:
返回: 有数字,数字相加后写文本,并返回求和数值(非字符串).无有效数字返回nil.
|;
(defun c:sj ( / ss filter mspace n e str asclst strs add pt txt txth)
  (defun *error* (msg) (if ss (x_draw ss 4)) (setq *error* oerr))
  (princ "\n选用-----------------------陌生人.2004.1")
  (princ "\n选择要计算的文本(支持*TEXT选择集):")
  (setq oerr *error*
        ss (ssget '((0 . "*TEXT")))
        filter "0123456789.-+"
        mspace (vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object)))
        str nil strs nil)
  (if ss
    (repeat (setq n (sslength ss))
      (x_draw ss 3)
      (setq n (1- n)
            e (ssname ss n)
            str (vla-get-textstring(vlax-ename->vla-object e))
            strs (strcat (if strs strs " ") (x_txt2 str) " ")) ;;排除mtext bug.v1.1-2004.1
      )
    )
  (if (and ss (/= "" strs))
    (progn
      (setq add (eval (read (strcat "(+ " strs ")"))))
   (setq kg1 add)
  (if (< kg1 32)(setq kg11 32))
  (if (<= 32 kg1 40)(setq kg11 50))
  (if (< 40 kg1 50)(setq kg11 63))
  (if (<= 50 kg1 63)(setq kg11 80))
  (if (< 63 kg1 80)(setq kg11 100))
  (if (<= 80 kg1 100)(setq kg11 125))
  (if (< 100 kg1 125)(setq kg11 125))
  (if (<= 125 kg1 160)(setq kg11 200))
  (if (< 160 kg1 200)(setq kg11 200))   
  (if (<= 200 kg1 250)(setq kg11 320))
  (if (< 250 kg1 320)(setq kg11 320))
  (if (<= 300 kg1 400)(setq kg11 400))
  (if (< 400 kg1 500)(setq kg11 500))   
  (if (<= 500 kg1 630)(setq kg11 630))
  (if (< 630 kg1 )(setq kg11 n!!!))

(setq kg11 (rtos kg11 2 0))
(setq po (getpoint "input point----:"))
(command "text" po  ""  "" (strcat "选用""" kg11 "A"))
)
            )
          (progn (if ss (x_draw ss 4))(xtcal))  ;多次<重新计算>可以作为一个简易统计查看器.
      )
    )
    (progn (princ "\n!空选集或文本中无有效数字!\n") nil)
  )
)


;;
(defun x_draw (ss key / n e)
  (if (= 'PICKSET (type ss))
    (repeat (setq n (sslength ss))
      (setq n (1- n)
            e (ssname ss n))
      (redraw e key)
    )
  )
)
;;
(defun x_txt2 (str / i key1 key2 str1)
(setq i 1 key2 nil)
(repeat (strlen str)
(cond
((= "{\\f" (substr str i 3)) (setq i (+ 3 i) key1 1 key2 1))
((and key1 (= "}" (substr str i 1))) (setq key1 nil key2 nil))
((and key1 (= ";" (substr str i 1))) (setq key2 nil))
((not key2)
(setq st (substr str i 1)
str1 (strcat (if (not str1) "" str1)
(cond
((= "." st)(if (wcmatch (substr str (1+ i) 1) "#") st " "))
((member st '("+" "-")) (if (wcmatch (substr str (1+ i) 1) "#,'.") st " "))
(T (if (wcmatch filter (strcat "*" st "*")) st " "))
)
))
)
)
(setq i (1+ i))
)
(setq str str1)
)

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

已领礼包: 11304个

财富等级: 富甲天下

发表于 2005-3-3 16:03:18 | 显示全部楼层
不清楚原程序结构,只能粗略判断,第一个函数多右括弧。更改如下:

  1. (defun c:sj ( / ss filter mspace n e str asclst strs add pt txt txth)
  2. (defun *error* (msg) (if ss (x_draw ss 4)) (setq *error* oerr))
  3. (princ "\n选用-----------------------陌生人.2004.1")
  4. (princ "\n选择要计算的文本(支持*TEXT选择集):")
  5. (setq oerr *error*
  6.       ss (ssget '((0 . "*TEXT")))
  7.       filter "0123456789.-+"
  8.       mspace (vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object)))
  9.       str nil strs nil)
  10. (if ss
  11. (repeat (setq n (sslength ss))
  12.   (x_draw ss 3)
  13.   (setq n (1- n)
  14.         e (ssname ss n)
  15.         str (vla-get-textstring(vlax-ename->vla-object e))
  16.         strs (strcat (if strs strs " ") (x_txt2 str) " ")) ;;排除mtext bug.v1.1-2004.1
  17.   )
  18.   (if (and ss (/= "" strs)) (progn
  19.    (setq add (eval (read (strcat "(+ " strs ")"))))
  20.    (setq kg1 add)
  21.    (if (< kg1 32)(setq kg11 32))
  22.    (if (<= 32 kg1 40)(setq kg11 50))
  23.    (if (< 40 kg1 50)(setq kg11 63))
  24.    (if (<= 50 kg1 63)(setq kg11 80))
  25.    (if (< 63 kg1 80)(setq kg11 100))
  26.    (if (<= 80 kg1 100)(setq kg11 125))
  27.    (if (< 100 kg1 125)(setq kg11 125))
  28.    (if (<= 125 kg1 160)(setq kg11 200))
  29.    (if (< 160 kg1 200)(setq kg11 200))
  30.    (if (<= 200 kg1 250)(setq kg11 320))
  31.    (if (< 250 kg1 320)(setq kg11 320))
  32.    (if (<= 300 kg1 400)(setq kg11 400))
  33.    (if (< 400 kg1 500)(setq kg11 500))
  34.    (if (<= 500 kg1 630)(setq kg11 630))
  35.    (if (< 630 kg1)(setq kg11 n!!!))

  36.    (setq kg11 (rtos kg11 2 0))
  37.    (setq po (getpoint "input point----:"))
  38.    (command "text" po "" "" (strcat "选用""" kg11 "A"))
  39.   ) (progn
  40.    (if ss (x_draw ss 4))
  41.    (xtcal)
  42.   ) ;多次<重新计算>可以作为一个简易统计查看器.
  43.   )
  44. )
  45. (progn (princ "\n!空选集或文本中无有效数字!\n")
  46. )
  47. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-3 16:52:02 | 显示全部楼层
谢谢关注;
还是同样ERROR;
一波为平一波又起:
(defun c:dvv ( / ss filter mspace n e str asclst strs add pt txt txth kg1 kg11)
  (defun *error* (msg) (if ss (x_draw ss 4)) (setq *error* oerr))
  (princ "\n文本数字求和-----------------------陌生人.2004.1")
  (princ "\n选择要计算的文本(支持*TEXT选择集):")
  (setq oerr *error*
        ss (ssget '((0 . "*TEXT")))
        filter "0123456789.-+"
        mspace (vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object)))
        str nil strs nil)
  (if ss
    (repeat (setq n (sslength ss))
      (x_draw ss 3)
      (setq n (1- n)
            e (ssname ss n)
            str (vla-get-textstring(vlax-ename->vla-object e))
            strs (strcat (if strs strs " ") (x_txt2 str) " ")) ;;排除mtext bug.v1.1-2004.1
      )
    )
  (if (and ss (/= "" strs))
    (progn
      (setq add (eval (read (strcat "(+ " strs ")"))))

     
(setq kg1  add)
  (if (<=  43)(setq kg11 "VV-5x6-SC25"))
  (if (< 43 kg1 60)(setq kg11 "VV-5x10-SC25"))
  (if (<= 60 kg1 75)(setq kg11 "VV-3x16+2x10-SC32"))
  (if (< 75 kg1 100)(setq kg11 "VV-3x25+2x16-SC40"))

(setq po (getpoint "input point----:"))
(command "text" po ""  ""  kg11))
)
            )
          (progn (if ss (x_draw ss 4))(xtcal))  ;多次<重新计算>可以作为一个简易统计查看器.
      )


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

使用道具 举报

已领礼包: 11304个

财富等级: 富甲天下

发表于 2005-3-3 17:49:58 | 显示全部楼层
dhxf :您写程序时注意一下书写格式就可以很快找到错误。

  1. (defun c:dvv ( / ss filter mspace n e str asclst strs add pt txt txth kg1 kg11)
  2. (defun *error* (msg) (if ss (x_draw ss 4)) (setq *error* oerr))
  3. (princ "\n文本数字求和-----------------------陌生人.2004.1")
  4. (princ "\n选择要计算的文本(支持*TEXT选择集):")
  5. (setq oerr *error*
  6.       ss (ssget '((0 . "*TEXT")))
  7.       filter "0123456789.-+"
  8.       mspace (vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object)))
  9.       str nil strs nil)
  10. (if ss
  11. (repeat (setq n (sslength ss))
  12.   (x_draw ss 3)
  13.   (setq n (1- n)
  14.         e (ssname ss n)
  15.         str (vla-get-textstring(vlax-ename->vla-object e))
  16.         strs (strcat (if strs strs " ") (x_txt2 str) " ")
  17.    ) ;;排除mtext bug.v1.1-2004.1
  18.   (if (and ss (/= "" strs)) (progn
  19.    (setq add (eval (read (strcat "(+ " strs ")"))))

  20.    (setq kg1 add)
  21.    (if (<= 43)(setq kg11 "VV-5x6-SC25"))
  22.    (if (< 43 kg1 60)(setq kg11 "VV-5x10-SC25"))
  23.    (if (<= 60 kg1 75)(setq kg11 "VV-3x16+2x10-SC32"))
  24.    (if (< 75 kg1 100)(setq kg11 "VV-3x25+2x16-SC40"))

  25.    (setq po (getpoint "input point----:"))
  26.    (command "text" po "" "" kg11)
  27.   ))
  28. )
  29. (progn
  30.   (if ss (x_draw ss 4))
  31.   (xtcal)
  32. ) ;多次<重新计算>可以作为一个简易统计查看器.
  33. )
  34. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-3 18:27:46 | 显示全部楼层
特别感谢zxq0220;说不感谢是假的;我折腾这几段好几天了;
dvv问题解决;不过还有一段;
(defun c:zvv ( / ss filter mspace n e str asclst strs add pp txt txth kg2 kg12)
(defun *error* (msg) (if ss (x_draw ss 4)) (setq *error* oerr))
(princ "\n文本数字求和-----------------------陌生人.2004.1")
(princ "\n选择要计算的文本(支持*TEXT选择集):")
(setq oerr *error*
      ss (ssget '((0 . "*TEXT")))
      filter "0123456789.-+"
      mspace (vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object)))
      str nil strs nil)
(if ss
(repeat (setq n (sslength ss))
  (x_draw ss 3)
  (setq n (1- n)
        e (ssname ss n)
        str (vla-get-textstring(vlax-ename->vla-object e))
        strs (strcat (if strs strs " ") (x_txt2 str) " ")
   ) ;;排除mtext bug.v1.1-2004.1
  (if (and ss (/= "" strs)) (progn
   (setq add (eval (read (strcat "(+ " strs ")"))))

   (setq kg2 (* 1.4 add))
   (if (<=kg2  43)(setq kg12 "VV-5x6-SC25"))
  (if (< 43 kg2 60)(setq kg12 "VV-5x10-SC25"))
  (if (<= 60 kg2 75)(setq kg12 "VV-4x16+10-SC32"))
  (if (< 75 kg2 100)(setq kg12 "VV-4x25+16-SC40"))


   (setq pp (getpoint "input point----:"))
   (command "text" pp "" "" kg12)
  ))
)
(progn
  (if ss (x_draw ss 4))
  (xtcal)
) ;多次<重新计算>可以作为一个简易统计查看器.
)
)

这一段是按照正确格式写的;也没ERROR提示;
和DVV同时加载后,DVV运行,ZVV程序不运行;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11304个

财富等级: 富甲天下

发表于 2005-3-4 17:19:14 | 显示全部楼层
程序ZVV与DVV结构基本相同,维一不同的是:(setq kg2 (* 1.4 add))
楼主可以将变量add显示出看一看是否能够乘以1.4。我机器上只装了R14,无法运行您的程序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 23:00 , Processed in 0.335179 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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