《语料编程空手道:VBS零基础的文科入门》

李亮1975重庆

语料库快乐军政委
[FONT=宋体]《语料编程空手道:[/FONT]VBS[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]1[FONT=宋体]:记事本是你的编辑器】[/FONT]vbscript[FONT=宋体]编程(以下都简称为[/FONT]VBS[FONT=宋体]),对于[/FONT]Windows[FONT=宋体]用户来说,就是在“记事本”中写几行代码,然后把这个文件的文件扩展名改为[/FONT]vbs[FONT=宋体],就能双击这个文件而运行了。[/FONT]VBS[FONT=宋体]编程,对于[/FONT]Windows[FONT=宋体]用户来说,是“一种无需预备工作的随手之事”。如果你已经知道如何新建一个(纯)文本文件且更改它的文件扩展名为[/FONT]vbs[FONT=宋体],那么你会看到“扩展名的变化导致了文件图标的变化”,而如果你发现扩展名更改之后,文件图标并没有改变那么你就需要查询一下正确的方法。这里,我教你用[/FONT]DOS[FONT=宋体]命令来新建一个含有[/FONT]vbs[FONT=宋体]代码的[/FONT]vbs[FONT=宋体]文件!首先,你点“开始”的“程序”的“附件”的“命令提示符”,然后输入“[/FONT]copy con d:\test.vbs[FONT=宋体]”,回车,再输入“[/FONT]msgbox now[FONT=宋体]”,回车,然后点“[/FONT]ctrl+z[FONT=宋体]”这个组合键,回车。此刻,你看[/FONT]d[FONT=宋体]盘是不是就多了个[/FONT]test.vbs[FONT=宋体]啦?找到它,你就对着它点右键,选择“编辑”,“记事本”这个简洁明快的编辑器就弹出窗口来了。如果你觉得字体小,就点菜单“格式”的“字体”,自己设置更大的字号吧!从此,你就这样掌握了如何用“记事本”来编写、保存、运行你写的[/FONT]VBS[FONT=宋体]代码了。随时双击你写好且保存的[/FONT]test.vbs[FONT=宋体],你就算是立即欣赏自己的杰作了!好,当你双击上面的[/FONT]test.vbs[FONT=宋体]的时候,发生了什么呢?你应该就看到了一个“消息框”,写的“[/FONT]2013-7-6 20:48:34[FONT=宋体]”。原来,刚才的代码就是来呈现当前的年月日与时分秒的,每次你双击就会看到不同的时间提示哟。你点“消息框”的“确定”按钮,这个消息框就消失了,这个[/FONT]VBS[FONT=宋体]程序就结束了运行(且退出了)。这里的“[/FONT]now[FONT=宋体]”就是一个特殊的标志(严格名称是“内置函数”),它包含了随时的一个计算结果,而[/FONT]msgbox[FONT=宋体]是一个函数,它后面尾随的“[/FONT]now[FONT=宋体]”就是它的参数,如果你把[/FONT]now[FONT=宋体]用英语双引号包起来,那么[/FONT]now[FONT=宋体]就不是函数而是一个“静静的单词”了。你修改下你的源代码,保存之后退出,再运行下就明白了。

[/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"
 
这次教程是我首次出版“编程教程”

我这教程的思想酝酿了很久,一直希望有个我写的编程入门,很简单很灵活,暂不介绍复杂的概念,但把灵活性藏在简单之中。

以前的东西,无论视频或帖子或“孟庭苇”之类的,都是编程演示和代码特供。

但都不是手把手的入门,这次是手把手,零点扫盲到能做一些惊喜出来。所以,这次教程是我首次出版“编程教程”希望有人喜欢
 
回复: 《语料编程空手道:VBS零基础的文科入门》

谢谢!李博继续,继续学习。
 
这个系列,我规划了10课

第一课就是当前帖子,这课把75%的VBS和VB语法都介绍了。第二课就把剩下的20%左右都介绍完,只省略了很少的且偏难偏生僻的语法知识。后续8个课就从文件读写、字符串灵活处理、Word自动控制、HTML生成与查询、XML生成与查询这些角度把跟着这些课的学习者带入扎实的VBS初级水平毕业生水平。

编程技能像游泳,光看不练是左倾保守主义,光练不看是右倾激进主义,都难有扎实进展的。
 
回复: 《语料编程空手道:VBS零基础的文科入门》

谢谢分享!真心希望李博开坛讲法,搞一个相关的系列讲座啊!
 
回复: 《语料编程空手道:VBS零基础的文科入门》

对的,把这个做成一个系列。
 
Back
顶部