谈一谈file write中的控制字符

2018-01-17 闫续文 爬虫俱乐部 爬虫俱乐部


有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

 喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~


file write命令是用于写入TXT格式文件和二进制文件的命令,可以通过程序输出文本内容(详见推文《file write和filewrite( )傻傻分不清》),我们也多次在推文中使用file write将文本内容写入TXT文件。其实除此之外,file write还可以被用来构造一个固定宽度的文件呢,这个时候我们就需要用到控制字符啦。那么什么是控制字符呢?stata中常用的控制字符又有哪些呢?他们各自的功能是什么呢?今天我们就来给大家介绍一下吧~



Part

1

控制字符(Control Character)是出现于特定的信息文本中,表示某一特殊控制功能的字符,这些字符都是不可见字符。在ASCII码中,第0~31号及第127号(共 33个)是控制字符或通信专用字符(其余为可显示字符),如LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)等,它们并没有特定 的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。比如我们使用file write命令为TXT文件插入一个换页符,在记事本中换页符显示的是一个向上的小箭头:

我们把它复制到word中,换页符在word中会将文本内容自动分页显示在下一页:

而在Sublime Text中会显示“FF”:




Part

2

当我们使用file write命令写入TXT文件时,可以使用的控制字符有以下7个:

1. _skip(#):为文本文件插入#个空格(#为大于0的整数);

2. _tab[(#)]:为文本文件插入#个水平制表符(#为大于0的整数),如果不指定#则默认插入1个水平制表符;

3. _newline[(#)]: 对文本文件进行#次换行操作,可以缩写为_n[(#)](#为大于0的整数),如果不指定#则默认进行1次换行;作为文本行的结束标签,它在不同系统下具 有不同的含义,在Unix系统下代表一个换行符(\n),在Mac中相当于一个回车符(\r),而在 Windows系统中是一个回车符+换行符的组合(\r\n),相当于敲一下Enter键;

4. _column(#):为文本文件插入空格从而使输入的文本开始于第#列(#为大于等于1的整数);

5. _char(#):为文本文件插入一个ASCII编码#对应的字符(0 ≤ # ≤ 255),如_char(9) 对应的就是插入一个水平制表符,也就是_tab(有关ASCII编码的内容详见推文《识得庐山真面目—详解ASCII编码》);

6. _page[(#)]:为文本文件插入#个换页符(#为大于0的整数),如果不指定#则默认插入1个换页符;

7. _dup(#):指定_dup(#)后一项内容被写入#次(#为大于0的整数)。



Part

3

接下来我们使用file write命令结合这些控制字符来构造一个固定宽度的文件,首先生成6个变量名:

clear

cap mkdir E:\file\

cd E:\file\

tempname handle //生成一个临时句柄`handle’

file open `handle' using file.txt, text write replace //调用句柄`handle’,向file.txt中写入文本

file write `handle' _page _n //插入一个换页符并换行

file write `handle' _column(1) _skip(5) "var1" //定位于第1列,接着插入5个空格并输入文本“var1”

file write `handle' _column(10) _skip(5) "var2" //定位于第10列,接着插入5个空格并输入文本“var2”

file write `handle' _n //换行

file write `handle' _column(15) _tab(1) _skip(5) "var3" //定位于第15列,接着插入1个水平制表符和5个空格并输入文本“var3”

file write `handle' _column(20) _tab(2) _skip(5) "var4" //定位于第20列,接着插入2个水平制表符和5个空格并输入文本“var4”

file write `handle' _column(30) _tab(3) _skip(5) "var5" //定位于第30列,接着插入3个水平制表符和5个空格并输入文本“var5”

file write `handle' _skip(5) "var6" _n //插入5个空格,输入文本“var6”并换行

file close `handle' //关闭file

shellout file.txt

生成的TXT文件如下图所示:

接着我们写一个循环,为var1-var6每个变量生成100个观测值,这些观测值均为服从(0,1)均匀分布的随机数:

tempname handle

file open `handle' using file.txt, text write append

forvalues i = 1(2)100 {  

file write `handle' _column(1) %9.3f (`=runiform()') //指定生成的数据字节长度为9并保留小数点后3位有效数字

file write `handle' _column(10) %9.3f (`=runiform()')

file write `handle' _n

file write `handle' _column(15) _tab(1) %9.4f (`=runiform()')

file write `handle' _column(20) _tab(2) %9.5f (`=runiform()')

file write `handle' _column(30) _char(9) _char(9) _char(9) _dup(2) %9.6f (`=runiform()') _n //使用3个_char(9)来插入3个水平制表符,相当于_tab(3);使用_dup(2)将生成的随机数写入2次

}

file close `handle'

shellout file.txt

这样我们就使用file write命令结合这些控制字符构造出一个固定宽度的文件啦,大家要学会灵活运用stata中的控制字符哦。

     注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

文字编辑/王   悦

技术总编/刘贝贝


往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word.docx)文档

7.如何从pdf中提取表格数据

8.爬虫俱乐部出品——获取上市公司数据的利器

9.爬虫俱乐部出品——实证结果输出命令

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号

公开收集正在保存拖拽至此处以完成收集私密