《语料编程空手道VBS零基础的文科入门.pdf》由会员分享,可在线阅读,更多相关《语料编程空手道VBS零基础的文科入门.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、语料编程空手道:VBS 零基础的文科入门 作者:李亮(计算词典学方向,主攻语言工程)广东外语外贸大学 词典学中心 2013 年 7 月 7 日 Email: 【步骤 1:记事本是你的编辑器】vbscript 编程(以下都简称为 VBS),对于 Windows 用户来说,就是在“记事本”中写几行代码,然后把这个文件的文件扩展名改为 vbs,就能双击这个文件而运行了。VBS编程,对于 Windows 用户来说,是“一种无需预备工作的随手之事”。如果你已经知道如何新建一个(纯)文本文件且更改它的文件扩展名为 vbs,那么你会看到“扩展名的变化导致了文件图标的变化”,而如果你发现扩展名更改之后,文件图
2、标并没有改变那么你就需要查询一下正确的方法。这里,我教你用 DOS 命令来新建一个含有 vbs 代码的 vbs 文件!首先,你点“开始”的“程序”的“附件”的“命令提示符”,然后输入“copy con d:test.vbs”,回车,再输入“msgbox now”,回车,然后点“ctrl+z”这个组合键,回车。此刻,你看 d 盘是不是就多了个 test.vbs 啦?找到它,你就对着它点右键,选择“编辑”,“记事本”这个简洁明快的编辑器就弹出窗口来了。如果你觉得字体小,就点菜单“格式”的“字体”,自己设置更大的字号吧!从此,你就这样掌握了如何用“记事本”来编写、保存、运行你写的 VBS 代码了。随
3、时双击你写好且保存的 test.vbs,你就算是立即欣赏自己的杰作了!好,当你双击上面的 test.vbs 的时候,发生了什么呢?你应该就看到了一个“消息框”,写的“2013-7-6 20:48:34”。原来,刚才的代码就是来呈现当前的年月日与时分秒的,每次你双击就会看到不同的时间提示哟。你点“消息框”的“确定”按钮,这个消息框就消失了,这个 VBS 程序就结束了运行(且退出了)。这里的“now”就是一个特殊的标志(严格名称是“内置函数”),它包含了随时的一个计算结果,而 msgbox 是一个函数,它后面尾随的“now”就是它的参数,如果你把 now 用英语双引号包起来,那么 now 就不是函
4、数而是一个“静静的单词”了。你修改下你的源代码,保存之后退出,再运行下就明白了。【步骤 2:wscript.exe 是运行器】你如果稍懂编程或稍加思考就会觉得奇怪“为什么记事本写的一点代码都能瞬间变成一个小软件呢”。原因是,Windows 是根据一个文件的文件扩展名来决定用什么运行这个文件的,而 Windows 是默认用 C 盘的 system32 文件夹的 wscript.exe 来运行一个扩展名为 vbs 的文件的,所以计算机专业术语把这 wscript.exe 叫做“VBS 脚本解释器”。今后,随着你的 VBS 编程能力的提高,你写的代码越来越强大,wscript.exe 就能帮助你实现
5、非常广泛的功能呢。顺便告诉你,当你的 VBS 文件在运行的时候,你可以从“任务管理器”看到 wscript.exe 这个进程的。啊,对了,你可以把上面的“now”更换为“date”或“time”再运行下,你会发现“date 加上 time 就是 now 的内容”。【步骤 3:第一个程序只有一行】把我们的 test.vbs 改为这个内容(你写代码就是用后续两个中文双引号之间的内容哟):“msgbox 2+3”。双击运行下,你会看到消息框显示“5”。这里的 2+3 就叫做“表达式”,表达式往往变成计算结果而最终呈现。记住:乘号是*,除号是/,指数幂是符号,求余数是符号。所以 3乘以 4 就是 3*
6、4,而 8 除以 2 就是 8/2,而 2 的 3 次方就是 23,而求 8 除以 3 的余数是用“83”表达式哟。平时我们遇到的数据的类型,除了数值就是“字符串”了,字符串就是两个英语双引号之间包起来的部分,也可以是个空格,也可以是英语单词或汉字之类的。把两个字符串合并到一起就是使用“&”。例如你要合并 corpus 和 linguistics 这两个词,你就用“msgbox corpus&linguistics”。【步骤 4:第二个程序只有两行】在我们正常的程序中,数据往往是经过初始化、传递、转换而最终呈现的,而数据的主要表现形式就是“变量(名称)”。变量名称是一个“容器”,可以放入字符串
7、,也可以放入整数或有小数点的数值。当我们想要把一个变量名称进行赋值的时候,我们就采用“等于号”。例如“a=8”,这就是把 8 这个值赋予或存入 a 这个变量(名称)。变量名称都是英语字母开头且含有英语字母或数字的名称,例如“WordNumber”。值得注意的是,VBS 编程是忽视变量名的大小写的,所以“WordNumber”与“wordnumber”与“WORDNUMBER”都是同一个名称,都是同一个存储器!当然你也可以使用下划线在变量名中,但其他符号就最好不要使用了。例如“sentence_number”就是合法的变量名。现在,我们来体验下,变量名与数据的“流动”吧,请看下面的两行代码 my
8、_words=syntax and semantics msgbox my_words 你把上面两行代码变成一个 VBS 程序,运行结果就是一个含有syntax and semantics的消息框呢。而借助“&”这个符号,下面的两行代码跟上面的两行代码是完全等效的 my_words=syntax&and semantics msgbox my_words 当然,在同一行也能多次使用&这个符号(下面的代码也是同样的运行效果)my_words=syntax&and&semantics msgbox my_words【步骤 5:第三个程序只有三行】你运行下面的程序,就会得到消息框,提醒你“10”a=
9、5 b=a+a msgbox b 上面的第 2 行代码是把 b 的值变为 a 与 a 的和。下面的 1 行代码也是等效的 a=5:b=a+a:msgbox b 观察之后,你会理解“冒号”的作用了吧!冒号是把不同行的代码都强行变为同一行且冒号两侧必须有空格。至此,我们似乎对变量、赋值、表达式、消息框这些概念都理解深刻了起来。在此基础上,我们就需要学习“逻辑判断”了 a=10 if a8 then msgbox more than 8 你把上面代码的变量 a 的取值从 10 改为其他的取值,再次运行这两行代码所组成的程序,就会发现你用 if 和 then 实现了“智能判断”了。同时,你还必须理解下
10、面的代码跟上面的两行代码也是等效的 a=10 if a8 then msgbox more than 8 msgbox greater end if 你看出来了吧,“end if”就是来构建 if 的“后续的多个操作”的,你只需要每个语句写一行就可以了。如果你愿意的话,你可以让 if 是多个条件的集合 a=10 if a8 and a20 then msgbox more than 8 end if 看到了吧,“and”是“并且”,你可以设置多个 if 的条件表达式,之间用 and 连起来就行。【步骤 6:消息框在说话,输入框在听话】到目前为止我们所用的 msgbox 这个字眼其实是个函数,而
11、标准的函数用法是如下 msgbox(hello)如果你希望消息框不仅仅是个“确定”按钮,那你可以向 msgbox 传递第 2 个参数 msgbox hello,4 此刻你发现消息框变成了“是 否”这样的两个按钮了,这就是因为 4 是向 msgbox 传递的第 2 个参数(固定的代表“是否型双按钮风格的消息框”)。像上面这行代码的形式,是“省略了圆括号也因此无需返回值的函数调用形式”。如果你需要知道消息框被操作者点了“是”或“否”,你就必须写成下面的形式来接收“用户选择”哟 choice=msgbox(hello,4)msgbox choice 运行上面的程序,你会发现,当你点“是”这个按钮,第
12、二个消息框就会弹出“6”这个值,而你点“否”就会看到“7”这个值。上面的 choice 只是随便取的一个变量名,你改为 answer 或 myAnswer 都是等效的。所以,消息框不仅能呈现“计算结果”给用户,也能在程序运行中获取到用户的“选择”。但是,“是否型消息框”只是返回用户的意愿的“方向值”,而不能获取用户的自定义的数值或字符串,如果你需要克服 msgbox 的这个缺陷,你就要用 inputbox 这个函数。NewData=inputbox(请输入)msgbox 您输入了&NewData【步骤 7:字符串转换的系列函数,并不难】上面的 NewData 变量名也是任意的,你可以改为其他的
13、合理合法的名称。上面的两行代码也可以用“字符串转换的系列函数”来增加点“智能化”的,瞧 NewData=inputbox(请输入)msgbox 您输入了&ucase(NewData)上面的 ucase 你看得出是个函数,它的全称是 upper case,就是把你输入的字符串中的英语字母都变成大写,你试下!与 ucase 相关的函数就是 lcase,全称是 lower case,顾名思义是全部字母变为小写。除了大小写转换之外,我们还可以把多个字符串都“逆序排列”呢,你测试下面的代码 NewData=inputbox(请输入)msgbox 逆序之后是&StrReverse(NewData)逆序函数
14、之后,我们学“替换函数”NewData=inputbox(请输入)msgbox 逆序之后是&replace(NewData,o,z)你运行上面代码且输入“good”这个词的话,就会看到它变成了“gzzd”了,这叫做“全部替换”。如果你希望只替换一次,就 NewData=inputbox(请输入)msgbox 逆序之后是&replace(NewData,o,z,1,1)这里的第 4 个参数是 1,这表示从第几个字符位置上开始搜索,默认都是从 1 开始搜索的。最后位置上的参数取值为 1,是“替换次数”。好,我们继续学个“字符克隆函数”,用来产生 N 个相同的字符 msgbox string(5,g
15、)上面的代码就是产生 5 个 g,运行结果是“ggggg”被消息框弹出。“字符串搜索函数”也是很实用的 msgbox instr(1,english,li)上面运行结果是 4,表示从第“1”个位置上开始搜索,在“english”这个字符串的第 4 个位置上发现了“li”这个“(子)字符串”。“字符串提取函数”有 3 个 msgbox left(corpus,3)上面运行结果是“cor”msgbox right(corpus,3)上面运行结果是“pus”msgbox mid(corpus,3,2)上面结果是“rp”,第 2 个参数表示“起点位置”,第 3 个参数表示字符数量,你可以省略第 3 个
16、参数,但是在你省略第 3 个参数的情况下,你就得到“rpus”这个结果哟。【步骤 8:文件读写,无需你手工哟】大多数情况下,文件的读写是批量操作的必经之路,但本教程侧重最简洁代码和核心理念传授,所以跳过了一些偏繁琐的基本概念的讲解,而提供了首个实例如下 CreateObject(Scripting.FileSystemObject).CreateTextFile(bird.txt).write I am a bird 上面代码的函数名称和“Scripting.FileSystemObject”都是大小写随意的,大写或小写都是等效的,只是你刻意弄出首字母大写就有利于阅读而已。上面的多个函数通过英
17、文句号而“连续发力”,产生的效果是在当前脚本所在的文件夹新建了一个 bird.txt,写入一个英语句子,你可以把“I am a bird”更换为某个变量名,这样就可以通过变量来灵活地传递各种数据了,例如你用 inputbox 而输入一句话而后自动输入到一个新文件中。而你如果需要删除当前脚本所在文件夹的某个文件,你就 CreateObject(Scripting.FileSystemObject).DeleteFile bird.txt 如果你想复制一份 bird.txt 而形成 tiger.txt,你就 CreateObject(Scripting.FileSystemObject).CopyFile bird.txt,tiger.txt【步骤 9:文件夹的自动新建与删除】新建一个文件夹在当前脚本的所在位置就是 CreateObject(Scripting.FileSystemObject).CreateFolder bird 你也可以写出具体的绝对的路径 CreateObject(Scripting.FileSystemObject).CreateFolder c:bird 要删除(包括依然含有一些文件的)文件夹就 CreateObject(Scripting.FileSystemObject).DeleteFolder bird
限制150内