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