用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。”