【问题标题】:How to compare array to array using VBScript?如何使用 VBScript 将数组与数组进行比较?
【发布时间】:2019-02-18 03:01:20
【问题描述】:

我想检查我的文件中的数据是否存在于我拥有的数组数据中。如果退出与否,它将返回 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)

【问题讨论】:

    标签: arrays vbscript


    【解决方案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
    

    另一方面,如果您想检查输入字符串是否包含 所有 参考字符串,您可能会这样做:

    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
    

    【讨论】:

    • 感谢您的回答。这很棒。但我的期望是我想将数组与数组进行比较。我文件中的数据是这样的字符串 2j2H4F6d9d0d3hdfasgt.y7 。首先,我需要将其设置为数组,每个数组 2 位(“2j”,“2H”,“4F”,.....),我的数组参考是:(“2w”,“fr”,“5k ”、“2j”、“0w”)。所以,我想检查我的参考数组是否存在于我的第一个数组中,如果它存在,它返回我 0 和 1 是否存在。你能给我任何想法吗?谢谢
    • @SBR 请重新阅读我的回答。下半场要特别注意。
    • 但是如何对文件中的数据进行 2 比 2 比较?因为我在文件中的数据是这样的 2j2H4F6d9d0d3hdfasgt.y7 。而且我不想包括比较最后一行。
    • @SBR “如何”是什么意思?显然,您需要将我的答案中的代码片段与您现有的脚本集成。如果您发现自己无法做到这一点,您需要先找到(并按照自己的方式完成)VBScript 教程。我不打算为您提供交钥匙解决方案。
    • 顺便说一句,如果您要问如何从文件中读取输入字符串:那将是一个后续问题,应该作为一个新问题提出。 您查看了documentation 之后。确保将新问题的重点放在从文件中提取数据而不是比较操作上。
    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 2020-02-26
    • 2021-05-18
    • 2015-10-05
    • 2019-04-03
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多