用FOR循环执行重复操作
当你需要重复执行一组语句一 定次数时,你可以使用一个FOR...NEXT循环,如下例所示:
<%
for i=1 to 500
%>
Hello Again!
<%
next
%>
在这个例子中,句子“Hello Again!”被在浏览器中打印500次。FOR语句和NEXT语句之间的任何语句都将被重复执行。甚至,象这个例子一样,当循环体内是HTML代码时,它也将被重复执行。
通过使用关键字STEP,你可以构造反向的循环。考虑下面的例子:
<%
For i=500 to 1 step –1
%>
Hello Again!
<%
NEXT
%>
这个例子输出与上一个例子完全相同的结果。但是,在这个例子中,FOR...LOOP循环从数字500开始,反向循环到1。
你可以在循环中使用不同的步长。在下面的例子中,变量i每次被增加10:
<%
for i=1 to 500 step 10
%>
<%=i%><br>
<%
next
%>
你可以用EXIT FOR语句从一个FOR...LOOP循环退出。假定你在遍历一个数组以找到某个字符串表达式的匹配值。当你已经找到了一个匹配时,你不需要继续执行循环:
<%
dim myarray(10)
myarray(4)=”Running Shoes”
for i=0 to ubound(myarray)
if myarray(i)=”Running Shoes” then exit for
next
%>
在这个例子中,如果数组中某个元素的值与表达式“Running Shoes”相匹配,则立即退出FOR...NEXT循环。变量i的值等于被匹配的元素的索引值。
FOR EACH...NEXT语句于FOR...NEXT语句关系密切。FOR EACH...NEXT语句只适用于对数组或集合的元素进行循环,如下面的例子所示:
<%
dim myarray(10)
myarray(4)=”Running Shoes”
for each i in myarray
if i=”Running Shoes” then exit for
next
%>
这个例子中的脚本与上一个例子完成相同的任务。当字符串表达式得到匹配时,立即退出循环。但是,当脚本完成时,变量i的值等于“Running Shoes”。
与FOR...LOOP循环中不同,这里的变量i不是作为一个计数器。而是代表循环所操作的数组或集合的每个成员的值。如果你想显示一个数组的所有元素的值,你可以这样做:
<%
for each i in myarry
%>
<%=i%>
<%
next
%>
用WHILE和DO执行条件循环
当以指定的次数执行一组语句或显示HTML代码块时,FOR...LOOP循环是有用的。但是,在许多情况下,当一个循环执行之前,你并不知道它需要执行的次数。在这些情况下,你需要使用WHILE循环或DO循环。
WHILE循环当某个条件的真值保持为TRUE时,重复执行一组语句。考虑如下的例子:
<%
TheFuture=DATEADD(“s”,15,TIME)
WHILE TIME<TheFuture
%>
<%=TIME%> : Waiting For The Future... <BR>
<%
WEND
%>
<B> The Future’s Here!</B>
在这个例子中,处在WHILE和WEND之间的所有语句被重复执行,直到时间过去15秒。WHILE语句测试当时时间是否小于存储在变量TheFuture中的时间。一旦当前时间大于或等于TheFuture,则退出循环。
DO循环与WHILE循环密切相关,但是更复杂。用DO循环,你可以构造当某个条件保持为真时重复执行的循环,也可以构造重复执行直到某个条件为真的循环。这里有一个例子:
<%
do while sentence<>”Hello There!”
sentence=”Hello There!”
%>
<%=sentence%>
<%
loop
%>
在这个例子中,当变量sentence的值不等于字符串”Hello There!”时,处在DO语句和LOOP语句之间的语句被重复执行。因为在循环体你变量sentence被赋了值”Hello There!”,WHILE条件只在第一次迭代时为TRUE。换句话说,这个DO循环体内的语句只执行一次,字符串”Hello There!”只被在屏幕上打印一次。
在这个例子中,当某个条件为真时则执行循环。你也可以构造一个一直执行直到某个条件为真的循环,如下例所示:
<%
do until sentence=”Hello There!”
sentence=”Hello There!”
%>
<%=sentence%>
<%
loop
%>
这个脚本于上一个完成同样的功能。DO循环只执行一次。一旦变量sentence的值等于”Hello There!”就不再执行循环。这个循环只执行一次,字符串”Hello There!”只在屏幕上打印一次。
如果你愿意,你可以把表达式WHILE或UNTIL转移到循环的底部,象这样:
<%
do
sentence=”Hello There!”
%>
<%
loop until sentence=”Hello There!”
%>
使用DO循环时,你可以用EXIT DO语句退出循环。考虑如下的循环:
<%
do until 1<>1
exclaim=exclaim&”!”
if exclaim=”!!!!!” then exit do
loop
%>
<%=exclaim%>
在这个例子中,DO循环一直执行到1等于1,换句话说,它永远循环下去。然而,在每一次循环中,变量exclaim被追加一个感叹号。当变量exclaim等于字符串”!!!!!”时,exit do语句强制退出循环。
当用WHILE或DO构造循环时,小心不要构造死循环。如果你偶尔构造了一个死循环,不要担心。经过一定时间之后(通常是90秒),脚本会自动结束。
注意
你可以使用Sever对象的ScriptTimeOut属性来控制一个脚本执行多长时间后就算超时。请参见第14章,“使用单个Active Sever Page。”
当你需要重复执行一组语句一 定次数时,你可以使用一个FOR...NEXT循环,如下例所示:
<%
for i=1 to 500
%>
Hello Again!
<%
next
%>
在这个例子中,句子“Hello Again!”被在浏览器中打印500次。FOR语句和NEXT语句之间的任何语句都将被重复执行。甚至,象这个例子一样,当循环体内是HTML代码时,它也将被重复执行。
通过使用关键字STEP,你可以构造反向的循环。考虑下面的例子:
<%
For i=500 to 1 step –1
%>
Hello Again!
<%
NEXT
%>
这个例子输出与上一个例子完全相同的结果。但是,在这个例子中,FOR...LOOP循环从数字500开始,反向循环到1。
你可以在循环中使用不同的步长。在下面的例子中,变量i每次被增加10:
<%
for i=1 to 500 step 10
%>
<%=i%><br>
<%
next
%>
你可以用EXIT FOR语句从一个FOR...LOOP循环退出。假定你在遍历一个数组以找到某个字符串表达式的匹配值。当你已经找到了一个匹配时,你不需要继续执行循环:
<%
dim myarray(10)
myarray(4)=”Running Shoes”
for i=0 to ubound(myarray)
if myarray(i)=”Running Shoes” then exit for
next
%>
在这个例子中,如果数组中某个元素的值与表达式“Running Shoes”相匹配,则立即退出FOR...NEXT循环。变量i的值等于被匹配的元素的索引值。
FOR EACH...NEXT语句于FOR...NEXT语句关系密切。FOR EACH...NEXT语句只适用于对数组或集合的元素进行循环,如下面的例子所示:
<%
dim myarray(10)
myarray(4)=”Running Shoes”
for each i in myarray
if i=”Running Shoes” then exit for
next
%>
这个例子中的脚本与上一个例子完成相同的任务。当字符串表达式得到匹配时,立即退出循环。但是,当脚本完成时,变量i的值等于“Running Shoes”。
与FOR...LOOP循环中不同,这里的变量i不是作为一个计数器。而是代表循环所操作的数组或集合的每个成员的值。如果你想显示一个数组的所有元素的值,你可以这样做:
<%
for each i in myarry
%>
<%=i%>
<%
next
%>
用WHILE和DO执行条件循环
当以指定的次数执行一组语句或显示HTML代码块时,FOR...LOOP循环是有用的。但是,在许多情况下,当一个循环执行之前,你并不知道它需要执行的次数。在这些情况下,你需要使用WHILE循环或DO循环。
WHILE循环当某个条件的真值保持为TRUE时,重复执行一组语句。考虑如下的例子:
<%
TheFuture=DATEADD(“s”,15,TIME)
WHILE TIME<TheFuture
%>
<%=TIME%> : Waiting For The Future... <BR>
<%
WEND
%>
<B> The Future’s Here!</B>
在这个例子中,处在WHILE和WEND之间的所有语句被重复执行,直到时间过去15秒。WHILE语句测试当时时间是否小于存储在变量TheFuture中的时间。一旦当前时间大于或等于TheFuture,则退出循环。
DO循环与WHILE循环密切相关,但是更复杂。用DO循环,你可以构造当某个条件保持为真时重复执行的循环,也可以构造重复执行直到某个条件为真的循环。这里有一个例子:
<%
do while sentence<>”Hello There!”
sentence=”Hello There!”
%>
<%=sentence%>
<%
loop
%>
在这个例子中,当变量sentence的值不等于字符串”Hello There!”时,处在DO语句和LOOP语句之间的语句被重复执行。因为在循环体你变量sentence被赋了值”Hello There!”,WHILE条件只在第一次迭代时为TRUE。换句话说,这个DO循环体内的语句只执行一次,字符串”Hello There!”只被在屏幕上打印一次。
在这个例子中,当某个条件为真时则执行循环。你也可以构造一个一直执行直到某个条件为真的循环,如下例所示:
<%
do until sentence=”Hello There!”
sentence=”Hello There!”
%>
<%=sentence%>
<%
loop
%>
这个脚本于上一个完成同样的功能。DO循环只执行一次。一旦变量sentence的值等于”Hello There!”就不再执行循环。这个循环只执行一次,字符串”Hello There!”只在屏幕上打印一次。
如果你愿意,你可以把表达式WHILE或UNTIL转移到循环的底部,象这样:
<%
do
sentence=”Hello There!”
%>
<%
loop until sentence=”Hello There!”
%>
使用DO循环时,你可以用EXIT DO语句退出循环。考虑如下的循环:
<%
do until 1<>1
exclaim=exclaim&”!”
if exclaim=”!!!!!” then exit do
loop
%>
<%=exclaim%>
在这个例子中,DO循环一直执行到1等于1,换句话说,它永远循环下去。然而,在每一次循环中,变量exclaim被追加一个感叹号。当变量exclaim等于字符串”!!!!!”时,exit do语句强制退出循环。
当用WHILE或DO构造循环时,小心不要构造死循环。如果你偶尔构造了一个死循环,不要担心。经过一定时间之后(通常是90秒),脚本会自动结束。
注意
你可以使用Sever对象的ScriptTimeOut属性来控制一个脚本执行多长时间后就算超时。请参见第14章,“使用单个Active Sever Page。”