Stata程序:切割文件路径和文件名

发布时间:2020-10-08 阅读 2590

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程主页 https://gitee.com/arlionn/Course

作者:连玉君 (中山大学)
E-Mail: arlionn@163.com

问题描述

在编写 ado 文件时,要从用户输入的绝对文件路径中切割出「文件路径」和「文件名」。例如,

  • 用户输入的文件地址:D:\stata15\ado\personal\mydata/bigfile.txt」 切割后的希望得到:
  • 文件路径:D:\stata15\ado\personal\mydata/
  • 文件名:bigfile.txt

解决思路

以最后一个出现的 \/ 为分界点切开字符串,左侧的为文件路径,右侧的为文件名。

有两种情形需要考虑:有些用户输入的文件地址信息中只有文件名,即默认存储于当前工作路径下的文档;还有些用户输入的文件地址同时包含 \/ 字符 (如本例)。

因此,我们需要事先判断用户输入的文件地址中是否包含 \/ 字符;进而从字符串右侧确定 \/ 出现的位置,并以此为基础切割字符串。

对于 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

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD