Stata:如何撰写具有自动更新功能的Stata命令-updatecmd

全文阅读:Stata:如何撰写具有自动更新功能的Stata命令-updatecmd| 连享会主页

目录

1. 设计思路

前段时间发现 Gitee.com 的网页源代码更改了,导致原来写的用于安装的 gitee 命令 (用于安装 gitee 上的程序包) 无法使用。因此,不得不修改一下 gitee 命令,然后再发给 Baum 更新到 ssc 上。

但考虑到 Gitee.com 可能以后还会更改网页源代码,gitee 命令也得做相应更新。索性就在 gitee 命令中加入一段代码,用于检测是否有新版本的程序,并自动更新。代码原理很简单,就是对比一下电脑本地的 gitee.ado 的版本号与服务器上的版本号,如果本地命令版本号低于线上版本就重新安装 gitee 进行更新。

完成这项工作后,觉得有必要把自动更新程序提取出来写一个独立的命令,嵌入我的其他命令,以方便用户进行相关命令的更新,并及时修正命令存在的 bugs。

于是我开始更进一步的思考。gitee 命令做的是简单的爬虫工作,本身就是需要跟网络进行连接,并获取正确的内容。如果 Gitee.com 更改网页源代码,gitee 命令也得做对应的修改,要不用户无法使用。所以对于 gitee 命令强制更新似乎是可以接受的。

但对于其他命令,强制更新会更改用户电脑上的文件,显然不太合适,这应该由用户自己决定。所以在检查到新命令的时候,应该告知用户有新版本的命令,让用户选择是否更新。这就涉及到一个 Stata 与用户进行交互的问题。利用 Stata 的 Dialog programming,我设计了一个简单的弹窗。一旦检测到有新版本的命令,Stata 会弹出如下窗口,用户需要在 Yes 前面打钩 ,点 Next 进入更新;否则跳过更新。

更进一步地,我希望加入更新代码后对用户的干扰越小越好。如果没有检测到新版本,命令执行原来的功能,用户不会感知到检测更新的存在。如果存在新版本,用户可以选择更新或者不更新,然后程序继续执行原来的功能。要实现这目标,那么程序就需要进行递归。我用如下简单的流程图来说明:

另外一个问题是 Stata 用户可能在工作中会多次地使用一个命令,让命令每次调用都进行检测更新没有必要,也浪费时间和资源。对此,我可以用一个 global 来记录更新检测的状态,如果是已经检测过更新,那么后续用户再使用命令的时候就会跳过检测更新,执行原有的命令。最后,我将这一更新方法写成了新的命令 updatecmd 和 updatecmd2,可以作为 routine 用于嵌入用户的开发命令中,实现自动更新。

全文阅读:Stata:如何撰写具有自动更新功能的Stata命令-updatecmd| 连享会主页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值