找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2668|回复: 9

[求助] 外部读取问题

[复制链接]
发表于 2013-8-3 10:22:46 | 显示全部楼层 |阅读模式

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

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

×
read_tt如果以下面的方式写出,则laynm为nil,如果read_tt函数后加句(princ),则能正确读出laynm。不知道什么原因,特向大家请教下。
(defun read_tt(confile0 / confile x)
  (setq confile (open confile0 "r"))
(setq aa (repeat 3 (read-line confile)))
(foreach x
  '(bb cc dd ee ff gg hh ii) (set x (read-line confile))
)
(close confile)
)
(defun c:tt()
(if (setq confile0 (findfile "D:\\tt.ini"))
    (if (read_tt confile0) (setq laynm (print (list aa bb cc dd ee ff gg hh ii))))
))

把ini放入d盘.rar

183 Bytes, 下载次数: 1, 下载积分: D豆 -1 , 活跃度 1

测试

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

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-8-3 12:19:57 | 显示全部楼层
你的函数

(if (read_tt confile0)

这个语句要依靠函数read_tt的返回值是非NIL,才能进入setq laynum里面。

所以你要保证read_tt函数的返回值非NIL了

点评

当read_tt中不加入(princ)时,返回的为nil,反之为t。是否跟princ的关系比较大,还是我函数写错格式。  详情 回复 发表于 2013-8-3 12:25
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-3 12:25:42 | 显示全部楼层
Lispboy 发表于 2013-8-3 12:19
你的函数

(if (read_tt confile0)

当read_tt中不加入(princ)时,返回的为nil,反之为t。是否跟princ的关系比较大,还是我函数写错格式。

点评

和你函数写的没什么关系,主要是READ_TT函数最后一个函数的返回值的问题,你把读取文件进来的表作为函数最后返回数据表就行了,如果你能保证肯定有数据读入,哪怕最后直接给个T返回也可以。  详情 回复 发表于 2013-8-3 12:48
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-8-3 12:48:43 | 显示全部楼层
jiucheng01 发表于 2013-8-3 12:25
当read_tt中不加入(princ)时,返回的为nil,反之为t。是否跟princ的关系比较大,还是我函数写错格式。
...

和你函数写的没什么关系,主要是READ_TT函数最后一个函数的返回值的问题,你把读取文件进来的表作为函数最后返回数据表就行了,如果你能保证肯定有数据读入,哪怕最后直接给个T返回也可以。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-8-3 12:50:23 | 显示全部楼层
你把这个

(list aa bb cc dd ee ff gg hh ii)

作为返回值。

点评

谢谢lispboy,(list aa bb cc dd ee ff gg hh ii)或者(princ)作为结尾都是有返回值的,还是应了你的那句,必须有返回值才能向后传递。  详情 回复 发表于 2013-8-3 13:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-3 13:29:46 | 显示全部楼层
本帖最后由 jiucheng01 于 2013-8-3 13:36 编辑
Lispboy 发表于 2013-8-3 12:50
你把这个

(list aa bb cc dd ee ff gg hh ii)


谢谢lispboy,(list aa bb cc dd ee ff gg hh ii)作为结尾都是有返回值的,还是应了你的那句,必须有返回值才能向后传递。{:soso_e144:}而(princ)也是ok。
princ
在命令行打印表达式,或将表达式写入已打开的文件中
(princ [expr [file-desc]])
本函数的功能和 prin1 函数几乎相同,但本函数将使用 expr 中的控制字符的功能而不是照原样打印它们。一般,prin1 打印表达式的方式与 load 函数兼容,而 princ 打印的表达式则可以被 read-line 等函数读取。

点评

因为你用IF了吗,所以必须有值才能进入分支啊。  详情 回复 发表于 2013-8-3 17:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-3 17:17:10 | 显示全部楼层
jiucheng01 发表于 2013-8-3 13:29
谢谢lispboy,(list aa bb cc dd ee ff gg hh ii)作为结尾都是有返回值的,还是应了你的那句,必须有返 ...

因为你用IF了吗,所以必须有值才能进入分支啊。

点评

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-8-3 18:16:39 来自手机 | 显示全部楼层
read-line就像一个指针,遇回车结束自动移到下一行,文档结束read-line也就结束了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-3 19:14:40 | 显示全部楼层
本帖最后由 jiucheng01 于 2013-8-3 19:17 编辑
newer 发表于 2013-8-3 17:17
因为你用IF了吗,所以必须有值才能进入分支啊。


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

使用道具 举报

发表于 2016-7-3 13:05:31 | 显示全部楼层
你的函数有很多不完善的地方,建议改进。1,首先要确定什么情况下直接返回t,其余情况返回nil;2,先要判断传过来的参数文件是否存在,不存在则返回nil(未能成功读取相关参数);3,相关文件是否能正常打开,返回值同理;4,是否正常读取相关参数(也可留在调用程序去处理,这里只管读,还要考虑空文件的情况);还有一些出错的情况。这样,你的函数才是一个完善的函数。函数最后一句采用(pinc)始终是返回t,这要考虑对后续程序的影响。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 06:10 , Processed in 0.208172 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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