温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
作者:连玉君 (中山大学)
E-Mail: arlionn@163.com
问题描述
在编写 ado 文件时,要从用户输入的绝对文件路径中切割出「文件路径」和「文件名」。例如,
解决思路
以最后一个出现的 \
或 /
为分界点切开字符串,左侧的为文件路径,右侧的为文件名。
有两种情形需要考虑:有些用户输入的文件地址信息中只有文件名,即默认存储于当前工作路径下的文档;还有些用户输入的文件地址同时包含 \
和 /
字符 (如本例)。
因此,我们需要事先判断用户输入的文件地址中是否包含 \
或 /
字符;进而从字符串右侧确定 \
或 /
出现的位置,并以此为基础切割字符串。
对于 Stata 14 以上的用户,可以使用 ustrrpos()
函数来确定某个字符最后一次出现的位置,详情参见 help ustrrpos()
。
对于 Stata13 以前的用户,虽然没有 ustrrpos()
函数,但我们可以先使用 strreverse(s)
函数把用户输入的文件地址字符串翻转,继而使用 strpos()
函数确定 \
或 /
出现的位置即可。
一旦确定了 \
或 /
最后一次出现的位置,就可以使用 substr()
函数进行切割了。
范例:Stata 14 以上用户
1 | local filesource "D:\stata15\mydata/bigfile.txt"
2 |
3 | if strpos(`"`filesource'"', "\") | strpos(`"`filesource'"', "/"){
4 | local p1 = ustrrpos("`filesource'","\") // stata14 +
5 | local p2 = ustrrpos("`filesource'","/") // stata14 +
6 | local i = max(`p1', `p2')
7 | }
8 | else{
9 | local i = 0
10 | }
11 |
12 | local filepath = substr(`"`filesource'"',1,`i')
13 | local filename = substr(`"`filesource'"',`=`i'+1',.)
输出结果如下:
. dis `p1'
11
. dis `p2'
18
. dis `i'
18
. dis `"`filepath'"'
D:\stata15\mydata/
. dis `"`filename'"'
bigfile.txt
范例:Stata 13 以下用户
表面上,似乎只需修改上述代码中的第 4-5 行即可,但实际上你还要修改一下第 12-13 行。这需要一点小学三年级的数学知识,留给读者自行思考了吧 ^_^。
1 | local filesource "D:\stata15\mydata/bigfile.txt"
2 |
3 | if strpos(`"`filesource'"', "\") | strpos(`"`filesource'"', "/"){
4 | local p1 = strpos(strreverse("`filesource'"),"\") // stata14 +
5 | local p2 = strpos(strreverse("`filesource'"),"/") // stata14 +
6 | local i = max(`p1', `p2')
7 | }
8 | else{
9 | local i = 0
10 | }
11 |
12 | local filepath = substr(`"`filesource'"',1,`=`i'-2')
13 | local filename = substr(`"`filesource'"',`i',.)
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD