找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 924|回复: 12

[讨论]:共同完成读写ini文件通用函数

[复制链接]
发表于 2004-11-22 13:58:53 | 显示全部楼层 |阅读模式

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

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

×
用lisp写程序经常需要将用户设置保存到文件中,而每个人都可能用不同的方法来实现。我想能不能写一个通用的ini文件读写函数,完成这个任务。

[项目组1]
项目1=项目值1
项目2=项目值2
。。。。

[项目组2]
项目1=项目值1
项目2=项目值2
。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-11-22 15:15:43 | 显示全部楼层
楼主的想法很好,能不能说一说具体的实现方法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-22 17:35:40 | 显示全部楼层
一般的ini文件大致是这个样子的.

  1. [Class]
  2. num=4
  3. Class1=系统软件
  4. Class2=辅助工具
  5. Class3=网络工具
  6. Class4=多媒体
  7. StopTime=60

  8. [REG]
  9. Caption=系统特性
  10. Num=100
  11. Directory=REG
  12. File1=1.reg
  13. MSG1=关闭光驱的自动运行特性
  14. File2=2.REG
  15. MSG2=不显示登录后的Tips
复制代码

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

使用道具 举报

发表于 2004-11-22 20:11:49 | 显示全部楼层
放到注册表里我感觉更好,而且代码也简单!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-22 21:23:14 | 显示全部楼层
注册表中的内容不方便转移。如果是ini文件的话可以方便的复制到其他机器上。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-22 21:25:13 | 显示全部楼层 |阅读模式

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

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

×
最初由 wkai 发布
[B]注册表中的内容不方便转移。如果是ini文件的话可以方便的复制到其他机器上。 [/B]


嗯,这倒是,我没有考虑转移这一点!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2004-11-22 21:48:23 | 显示全部楼层
查询某项值

  1. (defun zhf:ini_ask(fn itemgroup item / tmp re)
  2.   (setq re (zhf:ini_read fn))
  3.   (if (setq tmp (assoc itemgroup re))
  4.     (cadr (assoc item (cdr tmp)))
  5.     )
  6.   )

对ini文件到表

  1. (defun zhf:ini_read (fn / itemgroup re lst tmp x)
  2.   (if (findfile fn)
  3.     (progn
  4.       (setq fn (open fn "r"))
  5.       (while (setq tmp (read-line fn))
  6.         (setq tmp (vl-string-right-trim
  7.                     " "
  8.                     (vl-string-left-trim " " tmp)
  9.                   )
  10.         )
  11. ;;;    (print tmp)
  12.         (cond
  13.           ((= ";" (zhf:str_nth tmp "s")))
  14.           ((and        (= "[" (zhf:str_nth tmp "s"))
  15.                 (= "]" (zhf:str_nth tmp "e"))
  16.            )
  17.            (if itemgroup
  18.              (setq lst (cons itemgroup lst)
  19.                    re  (append re (list lst))
  20.              )
  21.            )
  22.            (setq itemgroup (vl-string-right-trim
  23.                              "]"
  24.                              (vl-string-left-trim "[" tmp)
  25.                            )
  26.            )
  27.            (setq lst nil)
  28.           )
  29.           ((setq x (vl-string-search "=" tmp))
  30.            (setq lst (append lst
  31.                              (list (list (substr tmp 1 x) (substr tmp (+ 2 x))))
  32.                      )
  33.            )
  34.           )
  35.         )
  36.       )
  37.       (if itemgroup
  38.         (setq lst (cons itemgroup lst)
  39.               re  (append re (list lst))
  40.         )
  41.       )
  42.       (close fn)
  43.     )
  44.   )
  45.   re
  46. )

取字符串中的特定字符

  1. (defun zhf:str_nth(str n / re)
  2.   (cond
  3.     ((= 'STR (type n ))
  4.      (setq n (strcase n))
  5.      (cond ((= n "S") (setq re (substr str 1 1)))
  6.            ((= n "E") (setq re (substr str (strlen str) 1)))
  7.      )
  8.      )
  9.     ((= 'INT (type n ))
  10.      (setq re (substr str n 1))
  11.      )
  12.     ((= 'LIST (type n ))
  13.      (setq re (substr str n 1))
  14.      )
  15.     )
  16.   re
  17.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

 楼主| 发表于 2004-11-25 20:27:16 | 显示全部楼层
把表写入ini文件

  1. (defun zhf:ini_write(fn lst / m n )
  2.   (setq fn (open fn "w"))
  3.   (foreach n lst
  4.     (write-line (strcat "["(car n)"]") fn )
  5.     (foreach m (cdr n)
  6.       (write-line (strcat (car m)"=" (cadr m)) fn )
  7.       )
  8.     (write-line "" fn )
  9.     )
  10.   (close fn)
  11.   )

查询项目值

  1. (defun zhf:ini_ask(fn itemgroup item / tmp re)
  2.   (setq re (zhf:ini_read fn))
  3.   (if (setq tmp (assoc itemgroup re))
  4.     (cadr (assoc item (cdr tmp)))
  5.     )
  6.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

发表于 2004-12-4 17:00:12 | 显示全部楼层
这些内容还是很有用的. 可以让我们文件输出规范化
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-5 15:28:56 | 显示全部楼层
我现在只会autolisp,和一点arx,晓东的工具箱也不太清楚,但是我认为写ini一定要用GetPrivateProfileInt,GetPrivateProfileSection,GetPrivateProfileString,WritePrivateProfileSection才标准
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 17:35 , Processed in 0.207936 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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