找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3409|回复: 18

[求助] AutoLISP 写文件程序失灵(附源代码)

[复制链接]
发表于 2013-5-23 23:39:02 | 显示全部楼层 |阅读模式

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

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

×


本人刚接触AutoLISP编程,找到吴永进编的魔法书在练习。书中有个例题是将CAD中的文字写入记事本中。但我按照书上的程序编了之后,选取文字后,并不能写出所选的文字,记事本是空白的。不知道是什么原因,请各位大侠路过瞧一瞧,诊断诊断:

源程序如下:
从CAD中选取文字写入记事本


[pcode=lisp,true]
(defun c:ws()
    (setq ffn (getfiled "写出文件" "" "text" 1))
    (princ "\n选择文字...")
    (setq ss (ssget))
    (setq ff (open ffn "w"))
    (setq i 0)
    (repeat (sslength ss)
        (setq ssn (ssname ss i)) ;;返回选择集中第i个原子赋值给变量ssn,类似于ssn=<Entity name:1d62d68>
        (setq ssdata (entget ssn));;提取ssn变量的定义数据,包括图名、图层信息、类型、坐标等数据信息
        (setq sstype (cdr (assoc o ssdata)))
        (if (= sstype "TEXT")
            (progn
                (setq txt (cdr (assoc 1 ssdata)))
                (princ txt ff)
                (princ "\n" ff)
            )
        )
        (setq i (+ 1 i))
    )
    (close ff)
    (princ (strcat "\n写出文件:" ffn))
    (princ)
)
[/pcode]


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

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-23 23:46:27 | 显示全部楼层
你是照书输入的? 还是书里面光盘的代码你拷贝粘贴的?

(setq sstype (cdr (assoc o ssdata)))

这个我看好像是字母“o", 应该是数字 0
改成0 ,然后运行下代码试试。

评分

参与人数 1D豆 +4 收起 理由
XDSoft + 4 及时回复奖!

查看全部评分

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

使用道具 举报

发表于 2013-5-23 23:52:38 | 显示全部楼层
考大家眼力吗, o 改成 0

评分

参与人数 1D豆 +2 收起 理由
XDSoft + 2 及时回复奖!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2013-5-23 23:53:07 | 显示全部楼层
晓东真好,这么快就有大侠帮助了。谢谢Lispboy,确实是输入错误。:loveliness:3Q
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2013-5-23 23:56:08 | 显示全部楼层
QiaoCheng 发表于 2013-5-23 23:52
考大家眼力吗, o 改成 0

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

使用道具 举报

发表于 2013-5-23 23:59:23 | 显示全部楼层
moleusher 发表于 2013-5-23 23:56
新手一枚,原来可以看绿色的,代表数字。还是对函数不熟阿。。。。

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

使用道具 举报

发表于 2013-5-24 07:54:11 来自手机 | 显示全部楼层
这要是书上的,这书的水平就值得商榷了: 1 变量没有管理,初学更有开始养成好习惯,2 错误处理木有哪怕一个if,3 没有过滤概念,4 该注释的不讲解,即是导出到文件,那文件操作流程应该有注释来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2013-5-24 08:29:19 | 显示全部楼层
楼主不是会买到盗版书吧?

点评

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

使用道具 举报

已领礼包: 10249个

财富等级: 富甲天下

发表于 2013-5-24 08:39:09 | 显示全部楼层
sicky111 发表于 2013-5-24 08:29
楼主不是会买到盗版书吧?

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

使用道具 举报

发表于 2013-5-24 12:27:35 | 显示全部楼层
看看区别[pcode=lisp,true](defun c:ws (/ ffn ss ff i ssn ssdata sstype txt ff) ;_ / 后面是局部变量,程序结束回收内存
  (if (and ;_ 判断,以下全部为 T 才执行 Progn
(setq ffn (getfiled "写出文件" "" "text" 1)) ;_ 获取写出的文件
(progn
   (princ "\n选择文字...") ;_ 返回值为 nil ,所以后面要加 t
   t
) ;_结束 progn
(setq ss (ssget '((0 . "text")))) ;_这里加上过滤,后面就不用再判断是否是文字了
      ) ;_结束and, 只有每个语句返回非 Nil 才执行Progn 内部操作
    (progn
      (setq ff (open ffn "w") ;_以写模式打开文件
     i  0;_选择计数器
      )
      (repeat (sslength ss)
;;返回选择集中第i个原子赋值给变量ssn,类似于ssn=<Entity name:1d62d68>
(setq ssn    (ssname ss i)
       ssdata (entget ssn) ;_提取ssn变量的定义数据,包括图名、图层信息、类型、坐标等数据信息
       txt    (cdr (assoc 1 ssdata)) ;_取出其中的 String,
)
(write-line txt ff) ;_把 Text 逐个写入文件
(setq i (+ 1 i)) ;_计数器加 1
      )
      (close ff) ;_关闭文件
      (princ (strcat "\n写出文件:" ffn " ok!")) ;_提示文件位置
    )
  )
  (princ);_抑制命令行回显
)[/pcode]

评分

参与人数 1D豆 +3 收起 理由
cy956 + 3 有点过度注释之嫌,呵呵!不过应该鼓励!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2013-5-24 23:01:28 | 显示全部楼层
Free-Lancer 发表于 2013-5-24 07:54
这要是书上的,这书的水平就值得商榷了: 1 变量没有管理,初学更有开始养成好习惯,2 错误处理木有哪怕一个 ...

嗯,感谢Free-Lancer的建议。注释确实是很清楚,能促使自己搞懂lisp的语句内涵:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-24 23:04:17 | 显示全部楼层
QiaoCheng 发表于 2013-5-23 23:59
建议先学会调试,这样少走很多弯路的

请问调试的步骤是这样吗:
1、切换断点
2、激活编辑窗口
3、逐步执行表达式

另外,怎么看Vlisp中变量的结果呢?我运行的时候在监视窗口中看到的都是“nil”,这有什么含义呢?
感谢赐教!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-24 23:21:06 | 显示全部楼层
Free-Lancer 发表于 2013-5-24 07:54
这要是书上的,这书的水平就值得商榷了: 1 变量没有管理,初学更有开始养成好习惯,2 错误处理木有哪怕一个 ...

请教Free-Lancer,你所说的这4个习惯问题有具体的例子吗?
我这样理解是不是对:
1、变量管理:如申明局部变量
2、错误处理(能否举个例子呢,你后面的程序中有没有错误处理呢?)
3、过滤是什么呢,就是指缩小判断的范围吗/
4、注释管理(这个好理解)

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-5-24 23:35:47 | 显示全部楼层
moleusher 发表于 2013-5-24 23:04
请问调试的步骤是这样吗:
1、切换断点
2、激活编辑窗口

有新问题最好还是发新主题好,能让其他人快速知道,否则看过这个帖子的以为还是在继续讨论呢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 14:28 , Processed in 0.421501 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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