2012-08-09 21 views
5

Ho problemi a far funzionare correttamente il mio caso di test.QTP: Verifica se una serie di stringhe contiene un valore

Il problema è nel seguente codice, la prima istruzione if è esatta. QTP lamenta che un oggetto è necessaria

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 

Quando controllo matrice posso vedere che è popolato correttamente e 'j' è anche la stringa corretta. Qualsiasi aiuto con questo problema sarebbe molto apprezzato.

+0

Quali sono i contenuti di 'options'? sono queste stringhe, una sorta di oggetto di prova (se sì che tipo)? – Motti

+0

Sto popolando le opzioni in questo modo: 'options (0) =" welcome "' che è stringhe se sono corretto. È un array di dimensioni fisse. – L337BEAN

risposta

13

Le stringhe in VBScript non sono oggetti, in quanto non hanno funzioni membro. La ricerca di una sottostringa dovrebbe essere eseguita utilizzando la funzione 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 
+0

Ah si. Questo spiega i problemi che stavo avendo. Grazie per la tua risposta informativa. – L337BEAN

-2

Hi se controlli String esatto non sub-String nel StrComb uso serie perché se utilizza Instr allora se Array = "apple1", "apple2", "apple3", "Apple" e la scelta = "mela "quindi tutti restituiranno il pass per ogni articolo dell'array.

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 
+0

Invece dei numeri magici (errati!), È necessario utilizzare le costanti vbTextCompare/vbBinaryCompare (http://msdn.microsoft.com/en-us/library/05z4sfc7%28v=vs.84%29.aspx); impostando il valore di ritorno * in * il ciclo non ha senso. –

+0

Scusa .. Hai ragione ... anche il ciclo ... Grazie –

+0

Scusa .. Hai ragione riguardo al loop ... ma ho provato a passare 0 e 1 sembra funzionare bene .. penso invece di vbTextCompare/vbBinaryCompare 0 e 1 funziona bene .. Grazie –

0
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 
+0

ora la tua funzione non è una funzione e non usi ancora le costanti. Elimina questa "risposta" e correggi quella precedente (contenente il prezioso puntatore a StrComp()). –

10

Un modo conciso per verificare se un array di stringhe contiene un valore potrebbe essere quella di combinare i Filter e UBound funzioni:

 If Ubound(Filter(options, choice)) > -1 Then 
      MsgBox "Found" 
     Else 
      MsgBox "Not found!" 
     End If 

Contro: non si ottiene dove gli indici gli elementi sono trovati

Pro: è semplice e hai i soliti include e confronta i parametri per specificare i criteri di corrispondenza.

+1

Se ho capito bene i documenti, il problema con questa soluzione è che Filtro restituirà tutti gli elementi in cui la scelta è una sottostringa. Per esempio. con un array contenente "Dune", "Dunebug", "Blah" e choice = "Dune", restituirà due elementi. –

Problemi correlati