Как сравнить массив с массивом, используя VBScript? - PullRequest
0 голосов
/ 18 февраля 2019

Я хотел бы проверить, существуют ли данные в моем файле или нет в массиве данных, которые у меня есть.Он вернет 1 и 0, если его выход или нет.Внутри мой файл выглядит так:

2j2H4F6d9d0d3hdfasgt.y7

Но я обрезал последние 2 строки.И мой массив данных выглядит так: [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 голосов
/ 18 февраля 2019

С одной стороны, [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

Но, как я уже сказал, детали зависят от желаемого конечного результата.Если вы хотите проверить, содержит ли ваша входная строка любые значений массива, вы можете сделать что-то вроде этого:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...