找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2448|回复: 4

[每日一码] 支持文件搜索路径

[复制链接]
发表于 2013-6-19 22:05:01 | 显示全部楼层 |阅读模式

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

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

×
制作工具箱时,采用的“支持文件搜索路径”,本代码由网上的整合而成,感谢分享代码的各位大大。
代码写得比较粗糙,如有更好的请帮忙指正。
  1. (defun 支持文件搜索路径_lst()
  2. (setq acad_lst (getenv "ACAD"))
  3. ;将字符串字符串以 给定 Key 分解成
  4. ;例:(EF:String->list "a,b,c" ",") →("a" "b" "c")
  5. (defun EF:String->list (sSource sDelimiter / lenSource lenDelimiter iPos lstResult)
  6.   (if (= sDelimiter "") (progn (princ "EF:String->list 分割参数不能为空字符""") (exit)))
  7.   (setq
  8.     lenSource (strlen sSource)
  9.     lenDelimiter (strlen sDelimiter)
  10.   )
  11.   (while (setq iPos (vl-string-search sDelimiter sSource))
  12.     (setq
  13.       lstResult (cons (substr sSource 1 iPos) lstResult)
  14.       sSource (substr sSource (+ 1 iPos lenDelimiter))
  15.     )
  16.   )
  17.   (reverse (cons sSource lstResult))
  18. ) ;_ end EF:String->list

  19. ;从列表中移去指定的元素
  20. (defun drop (lst item)
  21.   (append (reverse (cdr (member item (reverse lst))))
  22.     (cdr (member item lst))
  23.   )
  24. )

  25. (defun GetMyApplicationPath  (AppID)
  26.   (vl-registry-read
  27.     (strcat
  28.       "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\"
  29.       AppID
  30.       "_is1"
  31.       )
  32.     "Inno Setup: App Path"
  33.     )
  34.   )


  35. (defun EC:Stru:GT:GetPath  ()
  36.   (GetMyApplicationPath "Gavin")
  37. )


  38. (setq acad_lsts (EF:String->list acad_lst ";"))
  39. (setq acad_lsts1 (foreach x (list ""
  40.       (EC:Stru:GT:GetPath)
  41.       (strcat (EC:Stru:GT:GetPath) "\\LISP")
  42.       (strcat (EC:Stru:GT:GetPath) "\\菜单")
  43.       (strcat (EC:Stru:GT:GetPath) "\\其它")
  44.       (strcat (EC:Stru:GT:GetPath) "\\其它\\Vlisp 开发小助手2010版")
  45.       (strcat (EC:Stru:GT:GetPath) "\\书籍")
  46.       (strcat (EC:Stru:GT:GetPath) "\\EXE")
  47.           )
  48.           (setq acad_lsts (drop acad_lsts x))))

  49. ;将字符串列表以 给定 字符串连接
  50. ;例:(EF:List->string ("a" "b" "c") ",") →"a,b,c"
  51. (defun EF:List->String (lstString Delimiter / str return)
  52.   (setq return (car lstString)
  53.   lstString (cdr lstString)
  54.   )
  55.   (foreach str lstString
  56.     (setq return (strcat return Delimiter str))
  57.     ) ;_ end of foreach
  58.   return
  59. );end EF:List->string

  60. (setq acad_lsts2 (EF:List->string acad_lsts1 ";"))
  61. (setq tmp (strcat (EC:Stru:GT:GetPath) ";"
  62.     (strcat (EC:Stru:GT:GetPath) "\\LISP") ";"
  63.     (strcat (EC:Stru:GT:GetPath) "\\菜单") ";"
  64.     (strcat (EC:Stru:GT:GetPath) "\\其它") ";"
  65.     (strcat (EC:Stru:GT:GetPath) "\\其它\\Vlisp 开发小助手2010版") ";"
  66.     (strcat (EC:Stru:GT:GetPath) "\\书籍") ";"
  67.     (strcat (EC:Stru:GT:GetPath) "\\EXE") ";"
  68.     acad_lsts2 ";"))
  69. (setenv "ACAD" tmp)
  70. )
  71. (支持文件搜索路径_lst)
  72. (princ)

评分

参与人数 1D豆 +6 收起 理由
XDSoft + 6 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-6-19 22:17:54 | 显示全部楼层
本帖最后由 laibinwu 于 2013-6-19 22:27 编辑

支持源码,这个不错。
  1. ;从列表中移去指定的元素
  2. (defun drop (lst item)
  3.   (append (reverse (cdr (member item (reverse lst))))
  4.     (cdr (member item lst))
  5.   )
  6. )


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

使用道具 举报

发表于 2013-6-20 05:47:35 来自手机 | 显示全部楼层
drop在这个指定元素有重复时可能出现非期望结果来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-20 15:42:18 | 显示全部楼层
楼上高手,说得非常对,有重复元素时,可能出现非期望结果:lol
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 08:22 , Processed in 0.209539 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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