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*?

Author: ElGavilan, 2015-01-20

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.
Ainda pensa que ocorrem na corda. Uma maneira de contornar isso é formatar os números como um dois literal. Algo do género.
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
 3
Author: PaulFrancis, 2015-01-20 16:19:50

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.

 1
Author: TheBlastOne, 2015-02-09 10:01:16