找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 719|回复: 3

[求助] [求助]:新编小程序有点问题,希望高手给指导指导!!

[复制链接]
发表于 2009-7-16 17:11:21 | 显示全部楼层 |阅读模式

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

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

×
今天小弟按照一本书上写的关于筛选梁配筋率大于2%的一个源程序,由于看不清楚电子书上的字,部分可能有错误,导致运行时提示“无效的选项关键字”,现将程序发上来,大家帮忙给看看,看到底是哪里出了错误。谢谢!!!


现将源程序发上!大家一起研究研究:

(princ"\n 本程序将选择图层21000梁配筋文字!")
(princ"\n 本程序快捷键为Ratio!\n")

(defun C:Ratio ()
  ;;生成图层2%高,并将图层颜色改为红色
  (command "layer" "n" "2% 高" " ")
  (command "layer" "c" 1 "2% 高" " ")
  (princ "选择目标箍筋值:")
  ;;构造针对TEXT的选择集ReinGroup,选择图层21000的所有文字
  (setq ReinGroup(ssget'((0."TEXT")(8."21000"))))
  (setq i% 0)   ;;计数,赋初值为0
  ;;选择集ReinGroup的图元个数
  (setq LenRein(sslength ReinGroup))
;;对ReinGroup所有图元进行判断
(repeat LenRein
      ;;将ReinGroup第i%图元赋值给ent
      (setq ent (entget(ssname ReinGroup i% )))
      ;;将图元ent的图层赋值给text_layer
      (setq text_layer(cdr(assoc 8 ent)))

(if(/=ent nil)
    (progn
        ;;获取图元ent的主文字值
        (setq str(cdr(assoclent)))
        ;;获取文字str的第一个字母
        (setq jsjtype(substr str l)))
        (setq numa 0 numb 0 numc 0)
  )
)

;;只判断主筋,不判断箍筋和抗扭筋
(if(and(/=ent nil)(/=jsjtype "G")(/=jsjtype "V"))
    (progn
          (setq strmid str)
      ;;将文字值前面的符号GVTH(以及后面的(%)号去掉
      ;;利用函数Str_to_Num和strmid转换成数字列表strlist
            (setq strlist(Str_to_Num
                          (vl'string'right'trim "(%)" (vl'string'left'trim "GVTH("strmid)))
        )
      ;;数字列表strlist里的数分别赋值给numa、numb和numc
          (cond
              ((=(length strlist)3)
              (setq numa(car strlist))
              (setq numb(cadr strlist))
              (setq numc(caddr strlist))
              )
          )
)
)
;;判断numa、numb和numc是否大于2.0,如果大于2.0,修改图层
(if(or(>numa 2.0) (>numb 2.0) (>numc 2.0))
    (setq Result_layer "2%高")
    (setq Result_layer text_layer)
)
;;获取ReinGroup第i%个图元的群码数据
(setq ent(entget(ssname ReinGroup i% )))

;;将新图层替换旧图层
(setq ent
    (subst(cons 8 Result_layer)(assoc 8 ent)ent)
)
;;删除ReinGroup第i%个图元
(entdel(ssname ReinGroup i%))
;;重新生成ReinGroup第i%个图元
(entmake ent)
(setq i%(1+i%))
)



     ;;;将字符串转换成数字列表
     ;;;示例:(Str_to_Num"2.00'0.52'1.82")result(2.00 0.52 1.82)
     (defun Str_to_Num(str/lstn sl cha 分隔符)
        (setq sl " "n 0
         )
        ;;寻找字符串的分隔符"-"
        (cond(wcmatch str "'-'")(setq 分隔符 "-"))
                  (T(setq 分隔符"-"))
        )
        ;;将分隔符"-"前的字符串重新赋值给sl
        (repeat(strlen str)
          (setq cha(substr str(setq n(l+n))l))
          (if(=分隔符 cha)
            ;;函数atof将sl转化成实数并赋值给数字列表lst
                 (setq lst(append lst(list(atof sl)))sl " ")
               (setq sl(strcat sl cha))
        )
       )
       ;;将字符串的最后一个数字赋值给数字列表lst
       (setq lst(append lst(list(atof sl))))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2009-7-16 17:37:28 | 显示全部楼层
还有这种书?
你对lisp的语言表达式不太了解。
特别运算符这块。

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

使用道具 举报

 楼主| 发表于 2009-7-17 09:47:12 | 显示全部楼层
我是按照书上照搬下来的,主要是书是电子版的,很不清楚,大哥能指出来哪部分错误了么?我用程序检查没有查出来错误啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-7-17 22:21:30 | 显示全部楼层
有些该有空格的地方好像没有空格。
比如,

  1. [font=courier new]

  2. (ssget  '((0."TEXT")(8."21000")))
  3.        ^

  4. (if (/=    xxx xxx) ...
  5.          ^

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 20:27 , Processed in 0.256533 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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