[VB Script] Array problem in VBS

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [VB Script] Array problem in VBS

    HI @ All

    Ich hoffe diese Frage kann einer von euch beantworten.
    es handelt sich hier um VBScript.

    Im Folgendem Skript wird sichergestellt das jede Zahl, egal in welcher Reihenfolge, nur einmal vorkommt.
    Im Script wird in "Sub Shuffle" eine zufällige Reihenfolge der Zahlen 1 bis Wert erstellt. wobei sich keine Zahl wiederholt.
    In "Sub NextPage" wird die nächste Zahl übergeben.


    Ich muss Dim myArray( 18 ) einen festen wert zuteilen.
    Sonst bekomme ich den Fehler "Ganzzahlige Konstante erwartet".

    Wie kann ich das ändern?

    Das Skript läuft zwar aber ich bekomme nach ca. 4-10 durchläufen der "Sub NextPage" den Fehler
    "Die Variable verwendet einen Automatisierungstyp, der von VBScript nicht unterstützt wird.

    Ich bin überfragt wieso klappt das 4-10 mal und dann wird nur noch die Letzte zahl ständig wiederholt?


    Ziel dieses Script soll sein.
    Ein Ergebnis wird aus einer Datenbank in einer Variable gespeichert.
    In diesem Fall "Wert = 18"
    Diese Variable Wert wird an das Script übergeben.
    Jetzt möchte ich gerne ein Array erzeugen das die Zahlen 1 bis 18 erhält.
    Alle Zahlen sollen in einer zufällige Reihenfolge sortiert werden wobei jede Zahl nur einmal vorkommen darf.
    Sollte "Sub Shuffle" erneut ausgeführt werden müssen die zahlen wieder in einer zufällige Reihenfolge sortiert werden.
    Die einzelnen Reihenfolgen müssen nach "Sub Shuffle" sich ständig unterscheiden.

    Mit bestem Dank im voraus für eure Mühe verbleibe ich mit freundlichen Grüßen.
    SiriusBlack

    ************************************************************

    VBScript

    Dim pages, index, Seite

    Sub Swap( a,b)
    tmp = pages( a)
    pages( a) = pages( b)
    pages( b) = tmp
    End Sub


    Sub Shuffle (Wert)
    Dim myArray(18)
    For x = 1 To Wert
    myArray(x) = x
    Next
    pages = myArray
    index = 0
    Randomize
    For i = 0 To UBound( pages)
    j = Int( (UBound( pages)+1)*Rnd)
    Swap i,j
    Next
    End Sub

    Sub NextPage
    If index = UBound( pages) + 1 Then
    pagename = "Start"
    index = 0
    Else
    pagename = pages( index)
    index = index + 1
    End If
    End Sub

    ************************************************************

  • #2
    Array

    OK ich hoffe noch auf ein paar spezies die meinen letzten fehler finden.

    Ich muss Dim myArray( 18 ) einen festen wert zuteilen.
    Sonst bekomme ich den Fehler "Ganzzahlige Konstante erwartet".

    Wie kann ich das ändern?
    Das wurde erfolgreich geändert. siehe VBS code.

    Falsche zahlen beispiele:

    15,16,5,2,12,10,10,10,10,10,10,10,10,10,10,10,10,10
    11,3,7,10,18,17,15,15,15,15,15,15,15,15,15,15,15,15
    4,10,2,8,14,12,3,18,11,16,17,5,12,1,15,7,7,7
    7,3,13,11,5,6,14,9,17,12,2,18,15,4,4,4,4,4

    So sollte z.b. eine Reihenfolge aussehen.

    4,13,9,11,1,6,16,17,10,15,2,14,18,7,5,8,12,3
    12,9,8,5,4,6,7,15,11,10,14,13,17,16,18,2,13,18

    Ich denke der fehler liegt am array weil das array (0) nicht mit einen wert versehen ist.
    Ich bitte vielmals um hilfe und bedanke mich im voraus für deine mühe.

    MfG Siri

    Code:
    VBScript
    
    Dim pages, index, Seite
    
    Sub Swap( a,b) 
     tmp = pages( a)
     pages( a) = pages( b)
     pages( b) = tmp
    End Sub
    
    
    Sub Shuffle (Wert)
        [b]Dim myArray()
        ReDim myArray(Wert)[/b]
    
        For x = 1 To Wert
          myArray(x) = x
        Next
     pages = myArray
     index = 0
     Randomize 
     For i = 0 To UBound( pages)
       j = cInt( (UBound( pages)+1)*Rnd)
       Swap i,j
     Next 
    End Sub
    
    Sub NextPage
     If index = UBound( pages) + 1 Then 
     pagename = "Start"   
      index = 0
    Mesagebox hallo
     Else
      pagename = pages( index)
      index = index + 1
     End If
    End Sub

    Kommentar


    • #3
      Hallo!
      Werte werden zufällig umsortiert im Bereich von 0 bis Wert+1.
      Initialisiert wird 1 bis Wert, d.h. der Inhalt der 0 und Wert+1
      wird zufällig irgendwo zwischenreingeschrieben.

      Also:
      For i = 1 To UBound( pages)
      j = cInt( (UBound( pages))*Rnd)
      Swap i,j
      Next

      Kommentar

      Lädt...
      X