在VBScript上“继续”(到下一次迭代)

时间:2010-10-15 16:13:09

标签: vbscript iteration next continue

一位同事和我试图在VBScript“For / Next”循环中找到一种相当于“continue”语句的方法。

我们看到的每个地方都发现人们没有办法在VBScript中做到这一点而没有讨厌的嵌套,这对我们来说不是一个选择,因为它是一个非常大的循环。

我们提出了这个想法。它会像“继续(下一次迭代)”一样工作吗?有没有人有更好的解决方法或改进建议?

For i=1 to N
  For workaroundloop = 1 to 1
    [Code]
    If Condition1 Then
      Exit For
    End If

    [MoreCode]
    If Condition2 Then
      Exit For
    End If

    [MoreCode]
    If Condition2 Then
      Exit For
    End If

    [...]

  Next
Next

感谢您的评论

9 个答案:

答案 0 :(得分:42)

您的建议可行,但使用Do循环可能会更具可读性。

这实际上是C中的一个成语 - 而不是使用goto,如果你想早点摆脱构造,你可以使用break语句进行do {} while(0)循环。

Dim i

For i = 0 To 10
    Do
        If i = 4 Then Exit Do
        WScript.Echo i
    Loop While False
Next

如同暗恋所示,如果你删除额外的缩进级别,它看起来会好一些。

Dim i

For i = 0 To 10: Do
    If i = 4 Then Exit Do
    WScript.Echo i
Loop While False: Next

答案 1 :(得分:7)

我决定使用一个布尔变量来跟踪for循环是否应该处理其指令或跳到下一次迭代:

Dim continue

For Each item In collection
    continue = True

    If condition1 Then continue = False End If

    If continue Then
        'Do work
    End If
Next

我发现嵌套循环解决方案有点令人困惑的可读性。此方法也有其自身的缺陷,因为在遇到continue后,循环不会立即跳转到下一次迭代。稍后的条件可能会反转continue的状态。它在初始循环中也有一个辅助构造,并且需要声明一个额外的var。

哦,VBScript ......叹息。

另外,如果你想使用已接受的答案,这对于可读性来说并不是太糟糕,你可以将它与:结合使用,将两个循环合并为一个:

Dim i

For i = 0 To 10 : Do
    If i = 4 Then Exit Do
    WScript.Echo i
Loop While False : Next

我发现消除额外的缩进程度很有用。

答案 2 :(得分:6)

一种选择是将循环中的所有代码放在Sub内,然后在您想要“继续”时从Sub返回。

不完美,但我认为额外的循环不会让人感到困惑。

编辑:或者我想如果你足够勇敢,你可以使用Goto以某种方式跳转到循环的开头(确保计数器正确更新),我认为VBScript支持,但如果有人发现您在代码中使用Goto,则您的声誉可能会受到影响:)

答案 3 :(得分:4)

我使用Do,循环很多,但我已经开始使用Sub或函数,我可以退出。它对我来说似乎更干净。如果您需要的任何变量不是全局变量,您还需要将它们传递给Sub。

For i=1 to N
 DoWork i
Next

Sub DoWork(i)
    [Code]
    If Condition1 Then
      Exit Sub
    End If

    [MoreCode]
    If Condition2 Then
      Exit Sub
    End If

    [MoreCode]
    If Condition2 Then
      Exit Sub
    End If

    [...]
End Sub

答案 4 :(得分:0)

将迭代实现为递归函数。

Function Iterate( i , N )
  If i == N Then
      Exit Function
  End If
  [Code]
  If Condition1 Then
     Call Iterate( i+1, N );
     Exit Function
  End If

  [Code]
  If Condition2 Then
     Call Iterate( i+1, N );
     Exit Function
  End If
  Call Iterate( i+1, N );
End Function

首先调用Iterate(1,N)

答案 5 :(得分:0)

我们可以使用单独的函数来执行continue语句工作。假设你有以下问题:

for i=1 to 10

if(condition) then   'for loop body'
contionue
End If

Next

这里我们将使用for循环体的函数调用:

for i=1 to 10
Call loopbody()
next

function loopbody()

if(condition) then   'for loop body'
Exit Function
End If

End Function

循环将继续执行函数退出语句....

答案 6 :(得分:0)

尝试使用While / Wend和Do While / Loop语句......

i = 1
While i < N + 1
Do While true
    [Code]
    If Condition1 Then
       Exit Do
    End If

    [MoreCode]
    If Condition2 Then
       Exit Do
    End If

    [...]

    Exit Do
Loop
Wend

答案 7 :(得分:0)

我认为您打算在if语句下包含“所有逻辑”。基本上:

' PRINTS EVERYTHING EXCEPT 4
For i = 0 To 10
  ' you want to say
  ' If i = 4 CONTINUE but VBScript has no continue
  If i <> 4 Then ' just invert the logic
    WSH.Echo( i )
  End If
Next

这可以使代码更长一些,但还是有人don't like break or continue

答案 8 :(得分:0)

我一直使用 Do While 循环。这适用于两种 For 类型循环。

For iIndex = 0 to 100
  Do
    If bCondition then Exit Do
    ...
  Loop While False
Next 

恕我直言,这看起来很干净。 我刚刚在底部看到了 Crush 的回答。抱歉重复回答。