Schlaufen etc.
Adrian Lenherr
Schon öfters habe ich bemerkt, dass verschachtete Schlaufen nicht gänzlich richtig funktionieren. So kommt es vor, dass eine if-Schlaufe in einer anderen if-Schlaufe vom Programm nicht beachtete wird, obwohl es das sollte.Auch bei anderen Schleifen ist mir dies aufgefallen zum Beispiel hier:
Idee: Finden leerer Einträge im Array aTemp() der ersten dimension, falls dies so ist muss das Array verschoben werden und um eins verkleinert
Private Sub ReDimaTemp()
Dim i As Integer = 0 'Zähler für äussere Schleife
Dim j As Integer'Zähler für innere Schleife
While i < aTemp.GetLength(0)
If aTemp(i, 1) = "" Then'Durchlauf des Arrays und suchen leerer Einträge
j = i 'Startpunkt j der inneren Schlaufe = äussere Schleife
While j < aTemp.GetLength(0)'durchlauf des Arrays bis zum schluss und löschen verschieben der Arrays um 1
aTemp(j, 0) = aTemp(j+1, 0)
aTemp(j, 1) = aTemp(j+1, 1)
j = j + 1
End While
ReDim Preserve aTemp(j - 2, 1)'Redimensionierung des Arrays, da alle um 1 verschoben wurden
i = i - 1'reduzierung von i, da der gleiche Eintrag des Arrays nochmals geprüft werden muss.
End If
i = i + 1'Lauf bis zum Schluss und wenn nötig wird die innere Schlaufe nochmals durchlaufen
End While
End Sub
Vielleicht habe ich etwas übersehen!?
gruss Adrian
Philipp Knecht
Hi AdrianVersuch mal den folgenden Code dann können wir eine Exception ausschliessen.
[quote]
Private Sub ReDimaTemp()
Dim i As Integer = 0 'Zähler für äussere Schleife
Dim j As Integer 'Zähler für innere Schleife
Try
While i < aTemp.GetLength(0)
If aTemp(i, 1) = "" Then 'Durchlauf des Arrays und suchen leerer Einträge
j = i 'Startpunkt j der inneren Schlaufe = äussere Schleife
While j < aTemp.GetLength(0) 'durchlauf des Arrays bis zum schluss und löschen verschieben der Arrays um 1
aTemp(j, 0) = aTemp(j+1, 0)
aTemp(j, 1) = aTemp(j+1, 1)
j = j + 1
End While
ReDim Preserve aTemp(j - 2, 1) 'Redimensionierung des Arrays, da alle um 1 verschoben wurden
i = i - 1 'reduzierung von i, da der gleiche Eintrag des Arrays nochmals geprüft werden muss.
End If
i = i + 1 'Lauf bis zum Schluss und wenn nötig wird die innere Schlaufe nochmals durchlaufen
End While
Catch Ex As Exception
MsgBox(Ex.Message)
End Try
End Sub
hth
Adrian Lenherr
Sali PhilippDanke an diesen hint, daran habe ich nicht mehr gedacht! Ich konnte das Problem beheben obwohl auch diese Debugversion relativ gewöhnungsbedrüftig ist.
Das Problem war ein Indexfehler und Schlaufen und Funktionen werden bei einem Fehler eben abgebrochen. Halt wie normales Coding.
Gruss&Merci Adrian
0
Please sign in to leave a comment.
Comments
0 comments