vbscript - una - vba array dinamico
QTP: Comprobando si una matriz de cadenas contiene un valor (4)
Tengo problemas para que mi caso de prueba se ejecute correctamente.
El problema está en el siguiente código, la primera declaración if es exacta. QTP se queja de que se requiere un objeto
For j=Lbound(options) to Ubound(options)
If options(j).Contains(choice) Then
MsgBox("Found " & FindThisString & " at index " & _
options.IndexOf(choice))
Else
MsgBox "String not found!"
End If
Next
Cuando reviso la matriz puedo ver que está poblada correctamente y ''j'' también es la cadena correcta. Cualquier ayuda con este problema sería muy apreciada.
Las cadenas en VBScript no son objetos, ya que no tienen funciones miembro. La búsqueda de una subcadena se debe hacer mediante el uso de la función InStr
.
For j=Lbound(options) to Ubound(options)
If InStr(options(j), choice) <> 0 Then
MsgBox("Found " & choice & " at index " & j
Else
MsgBox "String not found!"
End If
Next
Hola si compruebas String no String en la matriz, utiliza StrComb porque si usas InStr, entonces si array = "apple1", "apple2", "apple3", "apple" y choice = "apple", todos devolverán el pase para cada elemento de la matriz.
Function CompareStrings ( arrayItems , choice )
For i=Lbound(arrayItems) to Ubound(arrayItems)
'' 1 - for binary comparison "Case sensitive
'' 0 - not case sensitive
If StrComp(arrayItems(i), choice , 1) = 0 Then
CompareStrings = True
MsgBox("Found " & choice & " at index " & i
Else
CompareStrings = False
MsgBox "String not found!"
End If
Next
End Function
Function CompareStrings ( arrayItems , choice )
For i=Lbound(arrayItems) to Ubound(arrayItems)
'' 0 - for binary comparison "Case sensitive
'' 1 - for text compare not case sensitive
If StrComp(arrayItems(i), choice , 0) = 0 Then
MsgBox("Found " & choice & " at index " & i
Else
MsgBox "String not found!"
End If
Next
End Function
Una forma concisa de comprobar si una matriz de cadenas contiene un valor sería combinar las funciones de filtro y UBound :
If Ubound(Filter(options, choice)) > -1 Then
MsgBox "Found"
Else
MsgBox "Not found!"
End If
Contras: no se obtienen los índices donde se encuentran los elementos
Pros: es simple y tiene los parámetros de inclusión y comparación habituales para especificar los criterios de coincidencia.