WinCC Verschachtelte For-Schleife in VBS

EdinJasarevic

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe ein Array MsgNumberArray mit max. 7000 Elementen. Die Elemente sind Zahlen von 1 bis 192. Es soll gezählt werden, wie oft die Zahlen im Array vorkommen und die Mengen in das Array ErrorCode geschrieben werden. Der Index im Array ErrorCode steht für die Zahl und der Wert seht für die Menge. Dafür habe ich folgenden Code geschrieben:

Code:
For k = 1 To 192
    For j = 1 To 7000
        If MsgNumberArray(j) = k Then
            ErrorCode(k) = ErrorCode(k) + 1
        End If
    Next 
Next

Der Funktioniert aber nicht. Ich habe dann versucht, die äußere Schleife wegzulassen und die Anzahl der Wiederholungen nur für k = 1 zu erfassen:

For j = 1 To 7000
If MsgNumberArray(j) = 1 Then
ErrorCode(1) = ErrorCode(1) + 1
End If
Next

Und das hat prima funktioniert. Meine Vermutung ist, dass mit der Syntax der verschachtelten etwas nicht in Ordnung ist, konnte aber keine Lösung finden. Weiß jemand woran das liegt ? Vielen Dank !
 
Füg die Fehlerhantierung zu:

Am anfang:
Code:
ON ERROR RESUME NEXT

Am Ende, oder nach jeden 'verdächtige' Code:
Code:
If Err.Number <> 0 Then    ShowSystemAlarm "VBS Error: " & Err.Number & " " & Err.Description
    Err.Clear 
    Exit Sub
End If

Ich vermute dass 192 mal 7000 erzeugt ein Timeout.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ich nicht ganz verstehe ist, warum Du überhaupt mit einer verschachtelten Schleife arbeiten willst. Du hast geschrieben, dass in dem Array mit 7000 Elementen die Fehlernummern stehen und Du die Häufigkeit zählen möchtest. Da bräuchtest Du doch nur eine FOR-Schleife die die 7000 Elemente durchgeht und dann die Zahl in jedem Element als Index für das Array ErrorCode zu nehmen um den aktuellen Wert auszulesen und um 1 zu erhöhen.
 
Code:
    For j = 1 To 7000
        k = MsgNumberArray(j)
        If k  < 1 OR k  > 192 Then
            ErrorCode(0) = ErrorCode(0) + 1  // hier ErrorCodes < 1 bzw. > 192 zählen; ErrorCode([B]0[/B] TO 192)
        ELSE
            ErrorCode(k) = ErrorCode(k) + 1
        End If
    Next
 
Zuletzt bearbeitet:
Vielen Dank für die Antworten. Die Fehlerhantierung hatte ich schon drin und die hatte keine Fehler rausgespuckt. Aber auch wenn ich kürzere Arrays nehme funktioniert es nicht. Beide schleifen werden ausgeführt, aber das Programm geht nie in die If-Bedingung rein, obwohl es eigentlich unmöglich ist, dass die Bedingung nie erfüllt ist.
Ich habe es jetzt so gemacht, wie Oliver bereits geschrieben hat:

For j = 1 To 7000
ErrorCode(MsgNumberArray(j)) = ErrorCode(MsgNumberArray(j)) + 1
Next

Das funktioniert perfekt. Danke für den Tipp. Warum aber meine Lösung nicht funktioniert bleibt mir ein Mysterium :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum aber meine Lösung nicht funktioniert bleibt mir ein Mysterium :ROFLMAO:
Ich kann in Deinem Code auch keinen Fehler entdecken.
Allerdings hatte ich in VBA (nicht VBS, ist aber ähnlich) schon häufig Probleme damit, dass die Wahl der VariablenNamen Schwierigkeiten bereiten kann.
Ich vermute, dass man dann zufällig einen VariablenNamen (oder KonstantenNamen?) erwischt hat, der im "BetriebsSystem" bereits verwendet wird und somit doppelt belegt wäre.
Dann probiere ich es mit anderen VariablenNamen ... bis die Störung weg ist. Hat bisher immer geklappt und wenn auch erst nach mehreren Versuchen. ;)
 
Zuletzt bearbeitet:
Wo und wie sind Deine Arrays MsgNumberArray() und ErrorCode() deklariert?
In VBS sind Arrays nullbasiert, d.h. das erste Element hat den Index 0 und in einem Array mit 7000 Elementen gibt es das Element Array(7000) nicht.

Hast Du eine Meldeanzeige oder ein Meldefenster, was Meldungen der Meldeklasse "System" anzeigen kann? Wenn nicht, dann kannst Du Runtime-Fehler-Meldungen nicht sehen.

Harald
 
Zurück
Oben