web-dev-qa-db-ja.com

QTP:文字列の配列に値が含まれているかどうかの確認

テストケースを正しく実行するのに問題があります。

問題は以下のコードにあります。正確には最初のifステートメントです。 QTPはオブジェクトが必要であると文句を言います

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

配列を確認すると、正しく入力されており、「j」も正しい文字列であることがわかります。この問題についての助けをいただければ幸いです。

6
L337BEAN

VBScriptの文字列は、メンバー関数を持たないという点でオブジェクトではありません。部分文字列の検索は、 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
16
Motti

文字列の配列に値が含まれているかどうかを確認する簡潔な方法は、 Filter 関数と Bound 関数を組み合わせることです。

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

短所:要素が見つかったインデックスを取得できません

長所:それは簡単で、一致基準を指定するための通常の包含および比較パラメーターがあります。

15
gbonetti

@ gbonetti-次の例では、コードは「Found」を返します。 @GiacomoLacavaが言った理由によると思います。

    a = Array("18")

    If Ubound(Filter(a, "1")) > -1 Then
       MsgBox "Found"
    Else
       MsgBox "Not found!"
    End If
0
Ritwik
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