本帖最后由 yxp 于 2018-4-19 12:03 编辑
软件程序很难一步设计到位,通常有各种 bug,如何让 lisp 代码自动联网更新,获取最新代码?本文提供了一种轻量级的方法。用 lisp 连接 FTP 下载肯定是最快的,但是不直观,不知道更新了哪些代码。
实现思路: 用 lisp 后台分析一个网页或微博,如果找到关键字,则说明程序已更新,未找到则说明当前是最新版,不需要更新。
方法举例: 运行 lisp 打开本人的明经微博 http://www.mjtd.com/?77098,分析微博里的 lisp 代码,并下载到本地磁盘,然后让 CAD 自动加载、运行这段下载的代码。
以下代码在 win10 (x64) 系统中调试通过。
- ;;代码原创 by: yxp 2018/04/18
- (defun c:test()
- (vl-load-com)
- (setq addr "http://www.mjtd.com/?77098")
- (setq txt (loadhtml addr))
- (setq txt (car (RegExp txt "code=lisp.*/code" nil "i")))
- (setq txt (substr txt 10 (- (strlen txt) 14)))
- (setq txt (RegExp txt """ "\042" "gi"))
- (setq f (open "d:\\test1.lsp" "w")) ;;保存到磁盘
- (write-line (car txt) f)
- (close f)
- (load "d:\\test1.lsp")
- (princ)
- )
- ;; Lisp 读取网页信息 by: yxp 2017-4-18
- ;;可以用 ActiveX 方法调用 post 事件,用 Lisp 写一个网络留言本在 CAD 里运行,收集客户对程序的意见。
- (defun loadhtml( address / ob html)
- (setq ob (vlax-create-object "Msxml2.XMLHTTP"))
- (vlax-invoke-method ob "open" "get" address "false")
- (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke-method (list ob "send")))
- (princ "\n当前无网络连接")
- (setq html (vlax-get-property ob "responseText"))
- )
- (vlax-release-object ob)
- html
- )
- ;;加载正则表达式
- (defun RegExp (str mode nstr key / L)
- (setq reg (vlax-create-object "vbscript.regexp"))
- (vlax-put-property reg 'Pattern mode)
- (foreach x '(("Global" . "*g*,*G*")("IgnoreCase" . "*i*,*I*")("Multiline" . "*m*,*M*"))
- (vlax-put-property reg (car x) (if (wcmatch key (cdr x)) 1 0)))
- (if nstr (setq L (list (vlax-invoke reg 'replace str nstr)))
- (vlax-for x (vlax-invoke reg 'Execute str)(setq L (cons (vla-get-value x) L))))
- (vlax-release-object reg)
- (reverse L)
- )
|