Auch die in den folgenden Abschnitten vorgestellte WHILE-WEND-Kontroll-Struktur ist eine weitere Form der Loop-Kontroll-Strukturen.
Syntax für die WHILE-WEND-Kontroll-Struktur:
WHILE Expression <Anweisung(en)> WEND
Eine Datei wird zum Lesen geöffnet. Dann wird der Inhalt der Datei zeilenweise ausgelesen und jede Zeile in einem Array gespeichert – solange das Ende der Datei noch nicht erreicht ist und noch Zeilen ausgelesen werden können:
hFile = Open sRubrikPfad For Input While NOT Eof(hFile) Line Input #hFile, sZeile aSuchDateiMatrix.Add(sZeile) Wend Close #hFile aSuchDateiMatrix.Sort(0)
Die Aufgabe: 'Solange noch ein Block von zwei aufeinander folgenden Leerzeichen in einer Zeichenkette existiert, sollen alle Blöcke von zwei Leerzeichen durch ein einziges Leerzeichen ersetzt werden' hat eine einfache Lösung:
While InStr(sTestString, " ") sTestString = Replace$(sTestString, " ", " ") Wend
Das Beispiel 3 demonstriert den Einsatz von vier unterschiedlichen Loop-Kontroll-Strukturen für die Bearbeitung der gleichen Aufgabe:
Abbildung 10.3.4.5.1: Berechnung von Partialsummen nach 3 Varianten
Der Quelltext wird nur in den relevanten Auszügen angegeben:
… Public Sub btnPartialsummeBerechnen_Click() If KontrolleEingabedaten() = "Dateneingabe fehlerfrei!" Then If optVariante1.Value = True Then Variante_1(iAnfangszahl, iEndzahl) ' Kontrollstruktur FOR..TO..NEXT Else If optVariante2.Value = True Variante_2(iAnfangszahl, iEndzahl) ' Kontrollstruktur REPEAT..UNTIL Else Variante_3(iAnfangszahl, iEndzahl) ' Kontrollstruktur WHILE..WEND Endif Endif ' KontrolleEingabedaten() End ' btnPartialsummeBerechnen Private Sub Variante_1(iAnfang As Integer, iEnde As Integer) ' FOR..TO..NEXT Dim iPartialsumme As Integer = 0 Dim iSummand As Integer = iAnfang Dim iCount As Integer = 0 For iCount = 1 To (iEnde - iAnfang + 1) Step 1 iPartialsumme = iPartialsumme + iSummand ' Überlauf wegen Bereichsüberschreitung für Integer? If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then txtPartialsumme.Text = "FEHLER! SUMME " & String.Chr(8713) & " INTEGER" Return Endif ' Partialsumme-Überlauf ? Inc iSummand Next ' iCount txtPartialsumme.Text = Str(iPartialsumme) End ' Variante_1 - Kontrollstruktur FOR..TO..[STEP]..NEXT Private Sub Variante_2(iAnfang As Integer, iEnde As Integer) ' REPEAT..UNTIL Dim iPartialsumme As Integer = 0 Dim iSummand As Integer = iAnfang Repeat iPartialsumme = iPartialsumme + iSummand If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then txtPartialsumme.Text = "FEHLER! SUMME " & String.Chr(8713) & " INTEGER" Return Endif ' Partialsumme-Überlauf ? Inc iSummand Until (iSummand > iEnde) txtPartialsumme.Text = Str(iPartialsumme) End ' Variante_2 - Kontrollstruktur REPEAT..UNTIL Private Sub Variante_3(iAnfang As Integer, iEnde As Integer) ' WHILE..WEND Dim iPartialsumme As Integer = 0 Dim iSummand As Integer = iAnfang While (iSummand < iEndzahl + 1) iPartialsumme = iPartialsumme + iSummand If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then txtPartialsumme.Text = "FEHLER! SUMME " & String.Chr(8713) & " INTEGER" Return Endif ' Partialsumme-Überlauf ? Inc iSummand Wend ' While End txtPartialsumme.Text = Str(iPartialsumme) ' Alternative Variante 3: ' Do While (iSummand < iEnde + 1) ' iPartialsumme = iPartialsumme + iSummand ' If (IsIntegerRange(iPartialsumme) = False) And If (bSpezialfall22 = False) Then ' txtPartialsumme.Text = "FEHLER! SUMME " & String.Chr(8713) & " INTEGER" ' Return ' Endif ' Partialsumme-Überlauf ? ' Inc iSummand ' Loop ' txtPartialsumme.Text = Str(iPartialsumme) End ' Variante_3 - Kontrollstruktur WHILE..WEND