第3章VBScript的控制结构上一章所用的各范例中的脚本大部分都是相当简单的。因为它们都是从上到下顺序执行的,总是终止于最后一行,要想再次执行,必须从头开始。但实际上,一般脚本程序不会都那么简单,它们往往包含一些根据不同的情况选择执行的语句,以及根据某些条件重复执行的语句。为了能实现这样的功能,VBScript中设置了相应的流程控制语句,控制程序的执行。本章主要讨论VBScript中常用的几种控制结构,具体包含以下内容:条件语句If…Then多分支语句SelectCase计数式循环For…Next集合元素循环Foreach条件式循环While和Do…Loop3.1条件语句If…Then这是最常用的语句,照字面上的意思翻译过来也相当简单,就是“如果…就”。日常生活中也常常会用到这种句子,例如:要买一片CD,当店员告诉我们价钱时,我们就要决定是否要买。因此我们可以在购买前先设置一个条件:如果CD的价格在300元以下(含300元)就买;否则就不买。将这种情况转换为计算机语言程序,表示形式如下:IfCD价格=300Then买Else不买在VBScript脚本语言中,If…Then的语句有多种格式,我们以下分别进行讨论。3.1.1If的第一种格式:如果…就…(单一选择)格式如下:If条件Then语句组这是If指令最简单的格式“单一选择”,其中的“条件”是一个表达式,它所计算的结果必须是一个逻辑数据,如果“条件”的计算结果是“TRUE”,那么就会执行Then后面的“语句组”:如果“条件”的计算结果是“FALSE”,那么就会跳过整个If语句,而不会执行Then后面的“语句组”。如果Then后面的“语句组”较长,不便于写在同一行,可以另起一行书写,并在最后加上EndIf以结束If条件语句。形式如下:If条件Then语句组EndIf【例3-1】简单的If语句HTMLVBScript+ASP动态网页制作•50•HEADTITLEIf/TITLESCRIPTLANGUAGE=VBScript!--Score=70IfScore=60ThenMsgBox及格!--/SCRIPT/HEAD/HTML上述代码演示了“If…Then”的基本用法,首先将表示分数的变量Score赋值为70,接下来就判断这个变量的值是否大于60(表示是否及格),若大于等于60,则显示消息框“及格”,这里由于7060,所以显示如图3-1所示。如果不满足这个条件,则什么也不做。代码中的“Score=60”表示分数高于或等于60,如果这个表达式的值为真,表示条件成立,则执行Then后的语句,显示出信息框;如果表达式的值为假,也就是条件不成立,则跳出If语句,执行If语句之后的语句。读者也可以试着把“Score=70”这行改成“Score=50”,看这样执行时又会产生什么不一样的结果。在If语句的格式中,Then后面可以写多个语句,如:Ifx3Theny=1:z=2这时,可以把If语句写成如下形式:Ifx3ThenY=1Z=2EndIf注意:形式中EndIf不能省。另外,若把上述形式写成如下:Ifx3ThenY=1Z=2EndIf将产生错误。由于浏览器环境下系统不显示错在哪里,因此,对于这样的问题应特别小心。当然,你可以借助像FrontPage这样的编程环境来帮助查找脚本的中错误。3.1.2If的第二种格式:如果…就…否则…(双向选择)格式如下:If条件Then语句组一Else语句组二EndIf图3-1条件满足时显示的消息框第3章VBScript的控制结构•51•这个格式跟前一个格式不同的地方是多了Else部分,意思就是说如果上面的条件没有产生“TRUE”的话,那就执行Else后面的“语句组二”,所以叫作双向选择,他比前一个格式又多了一种变化,请看下面的范例。【例3-2】双向选择HTMLHEADTITLEIf/TITLESCRIPTLANGUAGE=VBScript!--Score=InputBox(请输入计算机成绩:,输入成绩)IfScore=60ThenMsg=及格!ElseMsg=不及格!EndIfMsgBox你的计算机成绩&Msg--/SCRIPT/HEAD/HTML为了验证本例中的代码,你应首先输入代码并保存成一个HTML文件,双击该文件图标后,将显示如图3-2所示输入框,若此时输入“87”,按“确定”按钮,将显示及格信息,如图3-3所示图3-2成绩输入框图3-3显示及格提示若输入“48”,如图3-4所示,按“确定”按钮,会显示不及格信息,如图3-5所示。图3-4在输入框中输入数据图3-5显示不及格提示本例代码中的If语句也可写在同一行,形式如下:VBScript+ASP动态网页制作•52•IfScore=60ThenMsg=“及格!”ElseMsg=“不及格!”但是,如果写成以下形式,则是错误的。IfScore=60ThenMsg=“及格!”ElseMsg=“不及格!”即使再加上EndIf,也是错误的。另外,格式中,条件满足时执行的语句和条件不满足时执行的语句都可以是另外一个条件语句,这时,就构成所谓的条件的嵌套。3.1.3If的第三种格式:多向选择当有多种情况需要进行分别处理时,可以使用如下格式的If语句:If条件1Then语句组1Elseif条件2语句组2Elseif条件3语句组3…………Else语句组N+1EndIf前面介绍的两种If语句都只能处理一个条件,而此格式可以同时处理许多条件。程序执行时,先检查“条件1”,若返回值为“TRUE”,则执行“语句组1”,然后跳到EndIf的下一个指令;若“条件1”的返回值为“FALSE”,则检查“条件2”,若返回值为“TRUE”,则执行“语句组2”,再跳到EndIf的下一个指令,否则检查“条件3”,依此类推。若所有条件都不成立,则执行Else后的“语句组N+1”。这里,“语句组1”至“语句组N+1”只有一个会被执行。这种程序逻辑翻译成一般用语就是“如果…就…否则如果…就…否则…”。【例3-3】使用多种条件HTMLHEADTITLE如果就否则如果就/TITLESCRIPTLANGUAGE=VBScript!--Score=InputBox(请输入计算机成绩:,输入成绩)IfScore=90ThenMsg=优等ElseIfScore90AndScore=80ThenMsg=甲等ElseIfScore80AndScore=70ThenMsg=乙等第3章VBScript的控制结构•53•ElseIfScore70AndScore=60ThenMsg=丙等ElseMsg=丁等EndIfMsgBox你的计算机成绩为&Msg--/SCRIPT/HEAD/HTML执行本例中的代码时,若输入“99”,然后按“确定”,会显示“优等”,如图3-6。图3-7所示。图3-6输入框图3-7显示等第若输入“46”,然后选取“确定”,则会显示“丁等”。上例中是对输入的一个数进行一系列判断,而实际上,当你浏览各种网页时,很少见到这样的输入框。那么条件语句用在哪里呢?请看另外一个例子。【例3-4】根据时间不同显示不同的问候信息HTMLHEADTITLE判断语句/TITLESCRIPTlanguage=VBScriptDimiTimeDimstrmsgiTime=HOUR(TIME)IfiTime3thenstrmsg=凌晨了,还没睡,小心身体噢。elseIfiTime7thenstrmsg=起这么早?elseIfiTime12thenstrmsg=上午好。elseIfiTime18thenstrmsg=下午好。VBScript+ASP动态网页制作•54•elsestrmsg=晚上好,吃过晚饭了?endIfmsgboxstrmsg/Script/HEADBODYonload=ShowMsg()随时间变化的问候。/BODY/HTML当你在深夜浏览该网页时,将得到如图3-8所示的问候,你的心情如何?3.2多分支语句Select…Case这种流程控制结构可以根据一个变量的值选择不同的执行方向,你可以把他想象成一个有多重入口的车库,这个车库可以根据要进来的车种而分配停车的位置。Select…Case就是依据这种方法来进行流程控制,它的格式如下:SelectCase变量Case值1语句组1Case值2语句组2Case值3语句组3……CaseElse语句组N+1EndSelect你必须先给Select…Case语句一个变量,这个变量就是它执行判断的对象,就好象上面所比喻的车库要以车的种类来当作判断的对象。接下来的Case就是要写出这个变量可能的情况,就好象车库可以停那几种车型,语句组就是指出相应的车型应停靠的位置。Select会从第一个值依次比较,看看是否和变量的值相等,如果相等就会执行其后的语句组,执行完之后再跳到EndSelect继续执行后面的程序。下面我们先来看个范例。【例3-5】多向选择HTMLHEADTITLE多向选择1/TITLESCRIPTLANGUAGE=VBScript!--NO=InputBox(请输入一个1-5之间的数字:,汉译英)图3-8不同时间的问候第3章VBScript的控制结构•55•SelectCaseNO'以NO作为比较对象Case1MSG=ONECase2MSG=TWOCase3MSG=THREECase4MSG=FOURCaseElseMSG=FIVEEndSelectMsgBoxNO&的英文为:&MSG--/SCRIPT/HEADBODY/BODY/HTML像这样用“Select…Case”的结构写出的程序也可以用“If…Then”结构来表示,但用“If…Then”写出的程序看起来会复杂一些。本例中的代码在浏览时,首先将给出一个输入框,若输入“1”,然后按“确定”,将显示如图3-9所示信息框,若输入5,则将显示如图3-10所示信息框。图3-9输入1后的显示图3-10输入5后的显示这个程序会将用户所输入的数值翻译成英文,然后显示出来。程序一开始会将用户输入的数值存入变量“NO”之中,然后再使用Select把变量“NO”的值同Case后面的各值进行比较,相等时就执行其后的语句组。如果变量NO的值同所有的Case后面的值都不相等时,就会跳到CaseElse,再执行其后的语句组。在上面的范例中,如果用户输入“6”的话,结果还是会显示“FIVE”,因为程序只写出判断值有没有等于1到4,若没有就会显示“FIVE”,但你还是可以把最后的Else那段改成如下:Case5Msg=“FIVE”这样的话就算用户输入“6”,也不会判断错误。其实不管在Select或If判断语句中,都不一定要加入Else语句,你可以根据需求来决定。VBScript+ASP动态网页制作•56•上面的程序也可以用“If…Elseif…EndIf”语句来完成,程序如下:【例3-6】用If语句实现的多向选择HTMLHEADTITLE多项选择2/TITLESCRIPTLANGUAGE=VBScript!--NO=InputBox(请输入一个1-5之间的数字:,汉译英)IfNO=1ThenMSG=ONEElseifNO=2ThenMSG=TWOElseifNO=3ThenMSG=THREEElseifNO=4ThenMSG=FOURElseifNO=5ThenMSG=FIVEEndIfMsgBoxNO&的英文为&MSG--/SCRIPT/HEAD/HTMLSelect…Case语句的好处就在于它可以清楚的显示出要执行的结果,程序越大就越能看到它的优点。不过“Select..Case”也有它的缺点,那就是它执行的判断语句只能针对一个变量,而If…Then则没有这个限制。有时,当需要对多个值进行同样处理时