明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4195|回复: 28

[求助][LISP]紧急求救

  [复制链接]
发表于 2003-10-25 15:37:00 | 显示全部楼层 |阅读模式
怎么在字符窜里查找 规定的字母所在的位置  http://www.mjtd.com/function/list.asp?id=72&ordertype=byletter这个贴字虽然写了但是我看不懂   请教哪位高手给指点一下!!谢谢
还有怎么定义错误函数, 我的程序在执行中途被取消的时候, 剩下未执行的部分会被显示在命令行里!!请教怎么样才能消除这种情况!!我是个新手!!!
谢谢各位大侠的解答
发表于 2003-10-25 15:45:00 | 显示全部楼层
未执行部分显示在命令行是什么意思?
错误函数就是*error*函数,你直接定义就可以了,程序出错时,系统就自动调用这个错误函数。
 楼主| 发表于 2003-10-25 15:50:00 | 显示全部楼层
我用的是R14  我在执行程序的中途不得已 而取消了  这时候我编辑的程序内容 被显示在命令行里 这是怎么回事呀?
发表于 2003-10-25 15:57:00 | 显示全部楼层
还是不明白,程序执行过程中出错,只会显示出错信息,怎么可能显示程序内容?
提供一个图看看,或者提供一段出错的程序,然后告诉我显示在命令行中的内容。
你说的那个函数,我做了一些注释,你看看,能否看懂
  1. (defun instr (str fnd)
  2.   (setq        str (strcase str T)
  3.         fnd (strcase fnd T)
  4.   );先将两个字符串都改为小写,这样,比较就不分大小写
  5.   (if (wcmatch str (strcat "*`" fnd "*"));判断字符串str中是否包含fnd字符串
  6.     (progn
  7.       (setq c 1)
  8.       (while (/= (setq s (substr str 1 (strlen fnd))) fnd);如果有,则循环,从第一位开始,取出与fnd相同长度的字符串,
  9.         ;与fnd比较,看是否相等,不等,则继续查找,
  10.         (setq str (substr str 2);将比较过不存在的第一位去掉,剩下其余部分
  11.               c          (1+ c)
  12.         )
  13.       );while结束
  14.     );progn结束
  15.     (setq c 0);如果str中不包含fnd字符串,则返回0
  16.   );if结束
  17.   c
  18. )
 楼主| 发表于 2003-10-25 16:06:00 | 显示全部楼层
谢谢斑竹
我用的是R14
(defun C:fe(/ oce dr xf xff f1 f2 f3 f4 n d1 d2 d3 d4 l lx zl
           zz zd zdd m m1 m2 m3 e1 e2 e3  )
  (command "undo" "be")
  (setq oce (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (initget " 8 10 12 15 16 20 22 25")
  (setq dr(getkword "\n请输入钢筋型号:"))
  (if (= dr nil) (quit))
  (cond
    ( (= dr "8")  ( setq xf "0.395"))
    ( (= dr "10") ( setq xf "0.617"))
    ( (= dr "12") ( setq xf "0.888"))
    ( (= dr "15") ( setq xf "1.387"))
    ( (= dr "16") ( setq xf "1.580"))
    ( (= dr "20") ( setq xf "2.466"))
    ( (= dr "22") ( setq xf "2.980"))
    ( (= dr "25") ( setq xf "3.850"))
)
(setq xff (atof xf))
(while  
(setq f1 (entsel "\n请选择钢筋跟数:"))
(setq f2 (car f1))
(setq f3 (entget f2))
(setq f4 (cdr (assoc 1 f3)))
(setq n (atof f4))
(setq d1(entsel "\n请选择单根长度:"))
(setq d2 (car d1))
(setq d3 (entget d2))
(setq d4 (cdr (assoc 1 d3)))
(setq l  (atof d4))
(setq lx(* n l 0.01))
(setq zl(* lx xff))
(setq zz(rtos zl  2  2))
(setq ll(rtos lx 2 2))
(setq zd(cons 1 zz))
(setq m(cons 1 ll))
(prompt "\n总长度=")
(princ ll)
(setq m1(entsel "\n选择总长度:"))
(setq m2(car m1))
(setq m3(entget m2))
(setq mm(assoc 1 m3))
(setq m3 (subst m mm m3))
(entmod m3)
(prompt "\n总重量=")
(princ zz)
(setq e1(entsel "\n选择总重量:"))
(setq e2(car e1))
(setq e3(entget e2))
(setq zdd(assoc 1 e3))
(setq e3 (subst zd zdd e3))
(entmod e3)
)
  (setvar "cmdecho" oce)
(princ)
)
您把这个程序加载到 r14上 然后在中途取消 按下F2看看 就知道了 谢谢
 楼主| 发表于 2003-10-25 16:13:00 | 显示全部楼层
还有请问斑竹 已知点P1 和 一条三维直线  怎么能找到 P1  到该直线上的垂足
发表于 2003-10-25 16:17:00 | 显示全部楼层
这是R14的出错函数做的东西,它将这些东西打印出来了,你可以自己定义出错函数,
如,你先加载这个函数,再运行程序
(defun *error* (msg) (princ msg))
 楼主| 发表于 2003-10-25 16:19:00 | 显示全部楼层
我用的是R14 这里的有些程序不能运行  在R14里 显示 null function  是不是用vb 编辑的 R14不默认
我是今年刚刚毕业的  现从事设计工作
 楼主| 发表于 2003-10-25 16:27:00 | 显示全部楼层
非常谢谢斑竹的光临  谢谢你的解答
 楼主| 发表于 2003-10-25 16:46:00 | 显示全部楼层
斑竹怎么我把上面的程序加载上去 无法执行 是怎么搞的  这在R14上默认
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-2 14:38 , Processed in 0.193333 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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