For/Next 使您得以对一系列语句多次求值。这与 If 和 Select 语句不同,在 If 和 Select 语句中,程序在对公式求值时几乎同时传递每个语句。
如果事先知道需要对语句求值的次数,最好使用 For/Next 循环。
示例 1
假设要反转 {客户.客户姓名} 字符串。例如,将“City Cyclists”变为“stsilcyC ytiC”。
Rem Reverse a string version 1 formula = "" Dim strLen strLen = Len ({Customer.Customer Name}) Dim i For i = 1 To strLen Dim charPos charPos = strLen - i + 1 formula = formula & _ Mid({Customer.Customer Name}, charPos, 1) Next i
假设字段 {客户.客户姓名} 当前值为“Clean Air”,检查该公式是如何运行的。将变量 strLen 赋值为“Clean Air”的长度,也就是 9。此时该变量亦被归类为数字变量。变量 i 称为 For 计数器变量,因为其值随着 For 循环的每次迭代而更改。换言之,它用于计算循环的迭代次数。For 循环将迭代 9 次。在第一次迭代时,i 是 1,接着是 2,然后是 3,依此类推,直到最后 i = 9。在第一次迭代时,{客户.客户姓名} 的第九个字符追加到空的特殊变量 formula 中。这样,在第一次迭代后 formula 等于“r”。在第二次迭代时,{客户.客户姓名} 的第八个字符追加到 formula 上,因此 formula 等于“ri”。程序继续迭代,直到第九次迭代后 formula 等于“riA naelC”,即反转字符串。
示例 2
下面是上述公式的更简单的演示,它使用具有负 Step 值 (-1) 的 Step 子句。对于“Clean Air”示例,在第一次迭代时 i 是 9,第二次迭代时 i 是 8,第三次迭代时 i 是 7,依此类推,直到最后一次迭代时 i 是 1。
Rem Reverse a string version 2 formula = "" Dim i For i = Len ({Customer.Customer Name}) To 1 Step -1 formula = formula + _ Mid({Customer.Customer Name}, i, 1) Next i
示例 3
最简单的方法是使用内置函数 StrReverse:
Rem Reverse a string version 3 formula = StrReverse ({Customer.Customer Name})
在 Crystal Reports 中,内置的字符串函数可以处理许多字符串处理应用,而这些应用通常要使用 For/Next 循环或某些其他类型的循环来处理。但是,在处理字符串和数组方面,For/Next 循环能提供最灵活和最强大的功能。如果内置函数不适用于所需的应用程序,则该循环可能必不可少。