Loops in Visual Basic
By Herbert J. Bernstein
© Copyright 1999 Herbert J. Bernstein
There are six major loop control structures in Visual Basic
The first two forms have the same meaning. The use of Until has the opposite meaning to the use of While. When While is used, the loop executes if the expression is true. When Until is used the loop executes is the expression is false. Putting the Until or While at the end of the loop causes the loop statement(s) to be executed before the test is made on the condition.
The For...Next loop for positive steps is equivalent to
variable = expression_1
While ( variable <= expression_2 )
statements(s)
variable = variable + expression_3
Wend
If the increment given in expression_3 is 1, the Step expression_3 may be dropped.
Thus we may modify the example given in converting strings of digits to numbers by changing the While Wend loop to a For Next loop
Private Function condexp(condition, exp1, exp2) As Variant If (condition) Then condexp = exp1 Else condexp = exp2 End If End Function Private Function myatod(xstring$) As Double Dim digfound As Integer ' flag for digit found Dim isign As Integer ' flag for sign ' 0 = not found, 1 = '+', -1 = '-' Dim decpos As Integer ' position after the decimal point Dim xpow10 As Double ' next (negative) power of ten Dim ipos As Integer ' position within string Dim idig As Integer ' current numeric digit Dim char as String ' next character from string digfound = 0 isign = 0 decpos = 0 xpow10 = 1.# Rem ipos = 0 myatod = 0.# Rem While (ipos < Len(xstring)) Rem ipos = ipos + 1 For ipos = 1 To Len(xstring) c = mid$(xstring,ipos,1) Select Case (c) Case "0" idig = 0 digfound = 1 Case "1" idig = 1 digfound = 1 Case "2" idig = 2 digfound = 1 Case "3" idig = 3 digfound = 1 Case "4" idig = 4 digfound = 1 Case "5" idig = 5 digfound = 1 Case "6" idig = 6 digfound = 1 Case "7" idig = 7 digfound = 1 Case "8" idig = 8 digfound = 1 Case "9" idig = 9 digfound = 1 Case "." If ( decpos = 0 ) Then idig = 0 digfound = -1 decpos = decpos+1 xpow10 = xpow10/10.# Else If ( isign <>0 ) Then myatod = CDbl(isign)*myatod Exit Function EndIf EndIf Case "-", "+" If (isign = 0 And digfound = 0) Then isign = condexp( (c = "-") , -1, 1) Else If (isign <> 0 ) Then myatod = CDbl(isign)*myatod End If Exit Function EndIf Case Else idig = -1 End Select If (idig = -1) Then If (isign <> 0 ) Then myatod = CDbl(isign)*myatod EndIf Exit Function Else If (digfound > 0) Then If ( decpos = 0 ) Then myatod = myatod*10.# + CDbl(idig) Else myatod = myatod + CDbl(idig)*xpow10 decpos = decpos +1 xpow10 = xpow10/10.# End If End If End If Rem Wend Next ipos If (isign <> 0 ) Then myatod = CDbl(isign)*myatod End If End Function Private Sub Command1_Click() Picture1.Cls Picture1.Print myatod(Text1.text) End Sub