如何使用VBScript比较数组与数组?

时间:2019-02-18 03:01:21

标签: arrays vbscript

我想检查文件中的数据是否存在,是否存在数组数据。如果退出,它将返回1和0。我的文件里面是这样的:

2j2H4F6d9d0d3hdfasgt.y7

但是我删了最后两行。我的数组数据是这样的:[2w fr 5k 2j 0w]。我想检查文件中是否存在数组数据。

Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

XX = 0

Set wshShell = CreateObject("WScript.Shell")

strFBString = wshShell.ExpandEnvironmentStrings("%FB%")

WScript.Echo "==>"
WScript.Echo "strFBString: " & strFBString

Set wshShell = Nothing

For i = 1 To Len(strFBString) Step 2
    If StrComp(Mid(strFBString, i, 2), [2w fr 5k 2j 0w]) = 0 Then
        XX = 1
    End If
Next

WScript.Echo "XX: " & XX

WScript.Quit(XX)

1 个答案:

答案 0 :(得分:1)

一方面,[2w fr 5k 2j 0w]在VBScript中不是有效的数组定义。如果要使用这5个字符串元素定义数组,则需要这样做:

Array("2w", "fr", "5k", "2j", "0w")

此外,StrComp()用于将一个字符串与另一个字符串进行比较。它不支持将字符串与数组进行比较。为了将字符串与数组的每个元素进行比较,您需要一个循环。但是,如何构建该循环取决于您要获得的结果。

看看您的代码,似乎您想在2j2H4...中找到一个匹配项,而不是在w2j2H...中找到一个匹配项,因此仅使用InStr()可能对您不起作用。在这种情况下,您可以使用内部循环进行比较:

ref = Array("2w", "fr", "5k", "2j", "0w")
For i = 1 To Len(strFBString) Step 2
    For Each s In ref
        If Mid(strFBString, i, 2) = s Then
            '...
        End If
    Next
Next

但是正如我已经说过的那样,细节取决于所需的最终结果。如果要检查输入字符串是否包含数组值的 any ,可以执行以下操作:

ref   = Array("2w", "fr", "5k", "2j", "0w")
found = False
For i = 1 To Len(strFBString) Step 2
    For Each s In ref
        If Mid(strFBString, i, 2) = s Then
            found = True
            Exit For
        End If
    Next
Next

另一方面,如果您想检查输入字符串是否包含参考字符串的 all ,则可能会执行以下操作:

ref   = Array("2w", "fr", "5k", "2j", "0w")
For Each s In ref
    found = False
    For i = 1 To Len(strFBString) Step 2
        If Mid(strFBString, i, 2) = s Then
            found = True
            Exit For
        End If
    Next
    If Not found Then Exit For
Next

您还可以使用完全不同的方法,例如将数据放入字典中。

data = CreateObject("Scripting.Dictionary")
For i = 1 To Len(strFBString) Step 2
    data(Mid(strFBString, i, 2)) = True
Next

使用这种方法,您可以检查数据是否包含像这样的任何参考值:

found = False
For s In Array("2w", "fr", "5k", "2j", "0w")
    If data.Exists(s) Then
        found = True
        Exit For
    End If
Next

或检查数据是否包含所有像这样的参考值:

found = True
For s In Array("2w", "fr", "5k", "2j", "0w")
    If Not data.Exists(s) Then
        found = False
        Exit For
    End If
Next