让 Lisp 程序联网自动更新的一种方法
本帖最后由 yxp 于 2018-4-19 12:03 编辑软件程序很难一步设计到位,通常有各种 bug,如何让 lisp 代码自动联网更新,获取最新代码?本文提供了一种轻量级的方法。用 lisp 连接 FTP 下载肯定是最快的,但是不直观,不知道更新了哪些代码。
实现思路: 用 lisp 后台分析一个网页或微博,如果找到关键字,则说明程序已更新,未找到则说明当前是最新版,不需要更新。
方法举例: 运行 lisp 打开本人的明经微博 http://www.mjtd.com/?77098,分析微博里的 lisp 代码,并下载到本地磁盘,然后让 CAD 自动加载、运行这段下载的代码。
以下代码在 win10 (x64) 系统中调试通过。
;;代码原创 by: yxp2018/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: yxp2017-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)
)
本帖最后由 fl202 于 2018-5-15 15:09 编辑
yxp 发表于 2018-4-19 16:07
创建 Msxl2.XMLHTTP对象,调用 post 方法,发送网卡地址给服务器的 ACCESS 数据库....
是不是这样?服务器的 ACCESS 数据库是什么?
(defun posthtml(address txt1 / ob )
;;发送文字txt1到网址address
(setq ob (vlax-create-object "Msxml2.XMLHTTP"))
;(setq txt1 "abc123" address "http://www.mjtd.com/home.php?mod=space&uid=344850" )
;(vlax-invoke-method ob "open" "get" address "false")
(vlax-invoke-method ob "open" "post" address "false")
;;;...... 此处怎么写?
(vlax-release-object ob)
(princ)
)
在下以前也写过一个,只是年久失修,源码没了,(好在可以把代码直接更新在网页端,此程序仍可下载)为此很是心痛啊,告戒大家不要轻易重装系统,装系统之前一定要备份资料啊 fl202 发表于 2018-4-19 15:41
如果说:
我的程序发布后,我想知道我的程序大概有多少人在用?
怎么做法?谢谢!
创建 Msxl2.XMLHTTP对象,调用 post 方法,发送网卡地址给服务器的 ACCESS 数据库.... 沙发,yxp太牛了 如果说:
我的程序发布后,我想知道我的程序大概有多少人在用?
怎么做法?谢谢! 牛了,这样也行 服务器端也要有脚本才行 非常不错呀,谢谢楼主共享! 楼主高明,创意无限啊。