Was ist der beste Weg, um ein Array in Classic Asp VBScript zu durchlaufen?

Translate

Im folgenden Code

For i = LBound(arr) To UBound(arr)

Was ist der Sinn der Frage mitLBound? Sicher ist das immer 0.

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Warum nicht verwendenFor Each? Auf diese Weise müssen Sie sich nicht darum kümmern, was dieLBoundundUBoundsind.

Dim x, y, z
x = Array(1, 2, 3)

For Each y In x
    z = DoSomethingWith(y)
Next
Quelle
Translate

Dafür gibt es einen guten GrundNICHT NUTZENFor i = LBound(arr) To UBound(arr)

dim arr(10)Ordnet elf Mitglieder des Arrays 0 bis 10 zu (unter der Annahme der VB6-Standardoptionsbasis).

Viele VB6-Programmierer gehen davon aus, dass das Array einsbasiert ist, und verwenden niemals das zugewiesene Arrayarr(0). Wir können eine potenzielle Fehlerquelle mithilfe von entfernenFor i = 1 To UBound(arr)oderFor i = 0 To UBound(arr), denn dann ist klar obarr(0)wird benutzt.

For eacherstellt eine Kopie jedes Array-Elements anstelle eines Zeigers.

Dies hat zwei Probleme.

  1. Wenn wir versuchen, einem Array-Element einen Wert zuzuweisen, wird das Original nicht berücksichtigt. Dieser Code weist der Variablen den Wert 47 zui, wirkt sich aber nicht auf die Elemente von ausarr.

    arr = Array(3,4,8)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47

  2. Wir kennen den Index eines Array-Elements in a nichtfor each, und uns ist die Reihenfolge der Elemente nicht garantiert (obwohl es in Ordnung zu sein scheint.)

Quelle
Translate

LBoundist möglicherweise nicht immer 0.

Es ist zwar nicht möglich, ein Array mit einer anderen als einer unteren Untergrenze von 0 in VBScript zu erstellen, es ist jedoch weiterhin möglich, ein Array von Varianten aus einer COM-Komponente abzurufen, für die möglicherweise eine andere angegeben wurdeLBound.

Das heißt, ich bin noch nie auf einen gestoßen, der so etwas getan hat.

Quelle
Translate

Wahrscheinlich kommt es von VB6. Weil mitOptionsbasisAnweisung in VB6 können Sie die Untergrenze von Arrays wie folgt ändern:

Option Base 1

Auch in VB6 können Sie die Untergrenze eines bestimmten Arrays wie folgt ändern:

Dim myArray(4 To 42) As String
Quelle
Translate

Ich habe immer für jeden verwendet ...

Quelle
Translate

Das ist mein Ansatz:

dim arrFormaA(15)
arrFormaA( 0 ) = "formaA_01.txt"
arrFormaA( 1 ) = "formaA_02.txt"
arrFormaA( 2 ) = "formaA_03.txt"
arrFormaA( 3 ) = "formaA_04.txt"
arrFormaA( 4 ) = "formaA_05.txt"
arrFormaA( 5 ) = "formaA_06.txt"
arrFormaA( 6 ) = "formaA_07.txt"
arrFormaA( 7 ) = "formaA_08.txt"
arrFormaA( 8 ) = "formaA_09.txt"
arrFormaA( 9 ) = "formaA_10.txt"
arrFormaA( 10 ) = "formaA_11.txt"
arrFormaA( 11 ) = "formaA_12.txt"
arrFormaA( 12 ) = "formaA_13.txt"
arrFormaA( 13 ) = "formaA_14.txt"
arrFormaA( 14 ) = "formaA_15.txt"

Wscript.echo(UBound(arrFormaA))
''displays "15"

For i = 0 To UBound(arrFormaA)-1
    Wscript.echo(arrFormaA(i))
Next

Ich hoffe es hilft.

Quelle