significado - vbscript tutorial español
Listas en VBScript (3)
Aquí hay una alternativa también ... Una clase de lista real que creé hace un tiempo. Puede usarlo / modificarlo libremente para adaptarlo a sus necesidades. La clase original que construí realmente depende de otra clase personalizada llamada ArrayIterator .
Aquí es cómo usarlo ...
Set myList = New List
myList.Add("a")
myList.Add("b")
myList.Add("c")
'' Iterate through the List using ArrayIterator. You can of course use other methods...
Set myListItr = myList.GetIterator
While myListItr.HasNext
MsgBox myListItr.GetNext
Wend
'' Iterate through the List by getting the underlying Array.
Dim element
For Each element In myList.GetArray
MsgBox element
Next
Código fuente para la clase List :
Class List
Private mArray
Private Sub Class_Initialize()
mArray = Empty
End Sub
'' Appends the specified element to the end of this list.
Public Sub Add(element)
If IsEmpty(mArray) Then
ReDim mArray(0)
mArray(0) = element
Else
If mArray(UBound(mArray)) <> Empty Then
ReDim Preserve mArray(UBound(mArray)+1)
End If
mArray(UBound(mArray)) = element
End If
End Sub
'' Removes the element at the specified position in this list.
Public Sub Remove(index)
ReDim newArray(0)
For Each atom In mArray
If atom <> mArray(index) Then
If newArray(UBound(newArray)) <> Empty Then
ReDim Preserve newArray(UBound(newArray)+1)
End If
newArray(UBound(newArray)) = atom
End If
Next
mArray = newArray
End Sub
'' Returns the number of elements in this list.
Public Function Size
Size = UBound(mArray)+1
End Function
'' Returns the element at the specified position in this list.
Public Function GetItem(index)
GetItem = mArray(index)
End Function
'' Removes all of the elements from this list.
Public Sub Clear
mArray = Empty
End Sub
'' Returns true if this list contains elements.
Public Function HasElements
HasElements = Not IsEmpty(mArray)
End Function
Public Function GetIterator
Set iterator = New ArrayIterator
iterator.SetArray = mArray
GetIterator = iterator
End Function
Public Function GetArray
GetArray = mArray
End Function
End Class
Código fuente para la clase ArrayIterator :
Class ArrayIterator
Private mArray
Private mCursor
Private Sub Class_Initialize()
mCursor = 0
End Sub
Public Property Let SetArray(array)
mArray = array
End Property
Public Function HasNext
HasNext = (mCursor < UBound(mArray)+1)
End Function
Public Function GetNext
GetNext = mArray(mCursor)
mCursor = mCursor + 1
End Function
End Class
Intento crear una lista simple en un VBscript, pero no puedo encontrar algo similar.
Básicamente, estoy trabajando en Active Directory, y necesito obtener todos los grupos de los que es miembro un usuario para todos los usuarios dentro de un dominio. Ahora, cada usuario puede ser miembro de un número diferente de grupos, así que planeo usar un diccionario, con la clave que es el SAMID para el usuario, y el valor es una lista de todos los grupos de los que es miembro .
Puedo hacer esto con una matriz estática, pero luego tengo que declarar un gran tamaño aleatorio para la matriz que no es bueno. Lo que idealmente me gustaría hacer es tener una lista tipo python, donde pueda hacer algo simple como myList.Add y no tener que preocuparme por el tamaño.
Intenté usar System.Collection.ArrayList, pero recibo un error cuando lo ejecuto:
PS C:/tmp> cscript.exe ./foo.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
C:/tmp/foo.vbs(1, 1) (null): 0x80131700
¿Cómo puedo lograr esto?
Deshágase del diccionario y libere el poder de una ArrayList.
Option Explicit
dim list
Set list = CreateObject("System.Collections.ArrayList")
list.Add "Banana"
list.Add "Apple"
list.Add "Pear"
list.Sort
list.Reverse
wscript.echo list.Count '' --> 3
wscript.echo list.Item(0) '' --> Pear
wscript.echo list.IndexOf("Apple", 0) '' --> 2
wscript.echo join(list.ToArray(), ", ") '' --> Pear, Banana, Apple
EDIT: veo que ya probaste ArrayList, pero obtuve un error. Parece que su instalación del marco de dotnet no es correcta (System.Collections.ArrayList es parte de eso). Microsoft tiene un artículo sobre cómo resolver eso: http://answers.microsoft.com/en-us/windows/forum/windows_7-performance/error-code-0x80131700/3add8d80-00e0-4355-a994-8630d01c18f5
Set dic = CreateObject("Scripting.Dictionary")
dic.Add "Item1", ""
dic.Add "Item2", ""
dic.Add "Item3", ""