A criar arrays no QTP
estou a tentar criar um conjunto de inteiros no QTP (os ints são 9, 16, 25, 34, 43). Eu acho que o código para instanciar deveria ser (mas eu poderia estar errado já que eu nunca criei um array no QTP antes), {[[4]}
Dim pages(5)
pages(0) = 9
pages(1) = 16
...
Então eu tenho um laço for com uma variável que vai de 1 a 50 e baseado fora do valor da variável ele faz uma coisa e se a variável é um dos valores na matriz ele faz outra coisa. Por isso eu tenho,
For g = 1 to 50
if g<> 9 and g<> 16 and g<> 25 and g<>34 and g<> 43 Then
DoCoolStuff...
else
DoBoringStuff...
End If
Next
A minha pergunta é, há um ... um comando que me permitirá substituir essa feiosa declaração por algo como
se g < > em páginas*?
2 answers
Se você quer uma matriz dimensionada, então essa é a única maneira de declarar uma matriz. Se você queria um array não dimensionado você então pode usar,
Dim pages()
pages = Array(9, 16, 25, 34, 43)
No entanto, você também pode fazer isso,
Dim pages()
ReDim pages(5)
pages = Array(9, 16, 25, 34, 43)
Voltando ao teu problema, podes pôr isto a funcionar usando a função do filtro. Embora haja um pequeno problema. O método de Filtro absorve o texto, por isso, mesmo com essa função, a sua vontade irá corresponder 1, 2, 3, 4, 5, 6 junto com os valores reais / reais 9, 16, 25, 34, 43.
As,
- 1 ocorre em 16.
- 2 ocorre em 25.
- 3 ocorre em 34 e 43.
- 4occurs em 34 e 43.
- 5 ocorre em 25.
- 6 ocorre em 16.
Dim pages(), g As Integer
ReDim pages(5)
pages = Array("09", "16", "25", "34", "43")
For g = 1 To 50
If UBound(Filter(pages, Format(g, "00"))) > -1 Then
'Do Cool Stuff here
Else
'Do Boring Stuff here
End If
Next
Editar :
A outra maneira é criar uma função definida pelo utilizador que possa circular através do seu Array e encontrar se o valor for encontrado em seu Array. Algo como ...
Public Function FindArrayElement(SearchArray As Variant, LookupValue As Integer) As Boolean
Dim aCtr As Integer
For aCtr = 0 To UBound(SearchArray)
If CLng(SearchArray(aCtr)) = LookupValue Then
FindArrayElement = True
Exit Function
End If
Next
FindArrayElement = False
End Function
A função tem dois argumentos. O primeiro é o Array em que os valores são definidos, o segundo é o valor procurado para cima. Então o seu código Original mudaria para.
Dim pages(), g As Integer
ReDim pages(5)
pages = Array(9, 16, 25, 34, 43)
For g = 1 To 50
If FindArrayElement(pages, g) Then
'Do Cool Stuff here
Else
'Do Boring Stuff here
End If
Next
Primeiro, eu, também, sugeriria inicializar {[[2]}assim:
Dim Pages(): Pages=(9,16,25,34,43)
Em segundo lugar, e independentemente do primeiro aspecto, você poderia usar este código para verificar se g
está contido em Pages
:
Dim Elem
Dim Found: Found=false
For Each Elem in Pages
If Elem = g then
Found=true
Exit For
End If
End For
If Found then
DoBoringStuff
else
DoCoolStuff
End If
O For
..Each
o loop itera tantas vezes quantas existem elementos na matriz Pages
. Para cada iteração, Elem
é definido como um elemento Pages
array.
Note que a comparação é entre inteiros, como solicitado.