2017-02-13 8 views
0

Ich Refactoring mein Code und versuchen, die Wiederholung zu reduzieren. Ich habe diesen Arbeits Code bekamWie überprüft man, ob Variable in Array in VBScript

<% If tree <> "" or (info <> "" and info <> "links" and info <> "privacy" and info <> "talks") Then %> 
      write stuff 
<% End If %> 

habe ich die Info Variablen in ein Array

Dim info(3) 
info(0) = "Talks" 
info(1) = "Privacy" 
info(2) = "Links" 

ich unklar bin als

<% If tree <> "" or (info <> "" and **info <> arrayInfo** Then %> 
      write stuff 
<% End If %> 

Kleine Hilfe durch das Array zu durchlaufen. Vielen Dank.

Antwort

5

Sie benötigen ein Wörterbuch, wenn Sie ein Ausdruck verwenden möchten (.Exists) eine Tatsache zu erhalten (enthalten oder nicht) über alle Elemente einer Sammlung. Schauen Sie sich:

Option Explicit 

Dim aInfo(2) ' last index; not size 
aInfo(0) = "Talks" 
aInfo(1) = "Privacy" 
aInfo(2) = "Links" 
Dim dicInfo : Set dicInfo = CreateObject("Scripting.Dictionary") 
dicInfo.CompareMode = vbTextCompare 
Dim i 
For Each i In aInfo 
    dicInfo(i) = 0 
Next 
For Each i In Split("Talks Other Links Else") 
    If dicInfo.Exists(i) Then 
     WScript.Echo i, "found" 
    Else 
     WScript.Echo "no", i, "in", Join(dicInfo.Keys()) 
    End If 
Next 

Ausgang:

cscript 42207316.vbs 
Talks found 
no Other in Talks Privacy Links 
Links found 
no Else in Talks Privacy Links 
2

Eine andere Technik ist eine Zeichenfolge und instr() zu erstellen.

InStr ([starten] Zeichenfolge1, Zeichenfolge2 [, Compare]) Wenn Zeichenfolge2 nicht in Zeichenfolge1 gefunden wird, dann kehrt InStr 0.

beachten, dass der Rohrtrenner an den beiden ersten und Endpositionen wichtig ist von die Zeichenfolge, die wir suchen UND was wir suchen. Andernfalls erhalten Sie falsch-positive Ergebnisse.

<% 
dim sText 
sText="|Talks|Privacy|Links|" 

    If tree <> "" or (len(info) > 0 and instr(1, sText, "|" info & "|")) Then %> 
      write stuff 
<% End If %> 

Die Technik lohnt sich mit ein paar Strings zu testen. Der Standardvergleichsmodus unterscheidet zwischen Groß- und Kleinschreibung, Sie können ihn jedoch als unsensibel definieren.

Weitere Informationen finden Sie unter http://www.w3schools.com/asp/func_instr.asp.

Es ist weniger puristisch als mit einem Wörterbuch, aber es lohnt sich, es zu beachten.

2

Obwohl ich der obigen Antwort mit der Instr-Funktion zustimme, gibt es eine Alternative. Ihre Frage fragt, wie Sie das Array durchlaufen, um die Werte zu testen. Verwenden Sie eine For..Next Schleife. Codebeispiel unten.

dim arrInfo(2) 
dim blnInfoGood 

blnInfoGood = true 

arrInfo(0) = "Talks" 
arrInfo(1) = "Privacy" 
arrInfo(2) = "Links" 

for k = lbound(arrInfo) to ubound(arrInfo) 
    if info = arrInfo(k) then 
     blnInfoGood = false 
     exit for 
    end if 
next 

if tree <> "" or blnInfoGood then 
    ' Write stuff 
end if 

Hoffe, das hilft.

1

Verwenden Sie ein Wörterbuch und verwenden Sie eine einfachere Bedingung.

0

Hier ist die einfachste Möglichkeit, das Array zu durchlaufen, da Sie speziell danach gefragt haben.

Dim info(3) 
    info(0) = "Talks" 
    info(1) = "Privacy" 
    info(2) = "Links" 

    for i = 0 to 2 
     if tree = info(i) then 
      'do stuff here with match 
     end if 
    next 
+0

Bad Version von @ StackHound25 Antwort (falscher ubound, kein Ausgang) –

+0

@ Ekkehard.Horner Einfachere Version von Stackhound Antwort und nicht die falsche ubound. Das Array wird die Indizes 0, 1 und 2 berühren. Während der UBound-Wert hier eigentlich 3 sein könnte, würde die Schleife nicht so geschrieben werden. Ich verwende absichtlich nicht UBound, wenn die Array-Größe bekannt und festgelegt ist, persönliche Präferenz denke ich. Und der Ausgang fällt unter "Mach Sachen hier". Ich dachte, das wäre offensichtlich. Warum sind so viele Leute so schnell hier runter? – Daniel

+0

Weil viele Leute Code schlechter Qualität posten und faule Ausreden für ihre Fehler finden ("persönliche Präferenz", wie kann "aussteigen" unter "Dinge mit Match" fallen?) –

Verwandte Themen