मैं अपने कोड को दोबारा कर रहा हूं और पुनरावृत्ति पर कटौती करने की कोशिश कर रहा हूं। मेरे पास यह कामकाजी कोड है

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

मैंने जानकारी चर को एक सरणी में रखा है

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

मैं सरणी के माध्यम से पुनरावृति के रूप में अस्पष्ट हूँ

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

थोड़ी मदद। धन्यवाद।

2
testing123 13 फरवरी 2017, 18:12

5 जवाब

यदि आप किसी संग्रह के सभी तत्वों के बारे में तथ्य (शामिल है या नहीं) प्राप्त करने के लिए एक अभिव्यक्ति (.मौजूद) का उपयोग करना चाहते हैं, तो आपको एक शब्दकोश की आवश्यकता होगी। की ओर देखें:

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

आउटपुट:

cscript 42207316.vbs
Talks found
no Other in Talks Privacy Links
Links found
no Else in Talks Privacy Links
7
Ekkehard.Horner 13 फरवरी 2017, 19:10

एक अन्य तकनीक एक स्ट्रिंग और instr() बनाना है।

InStr([start,]string1,string2[,तुलना करें]) यदि string2 string1 में नहीं मिलता है तो InStr 0 देता है।

ध्यान दें कि पाइप विभाजक हमारे द्वारा खोजी जाने वाली स्ट्रिंग की पहली और अंतिम स्थिति और जो हम मिलान करना चाहते हैं, दोनों पर महत्वपूर्ण है। अन्यथा आपको झूठी-सकारात्मकता मिलती है।

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

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

परीक्षण करने के लिए कुछ तारों के साथ तकनीक सार्थक है। डिफ़ॉल्ट तुलना मोड केस संवेदी है लेकिन आप इसे असंवेदनशील बना सकते हैं।

विवरण के लिए देखें http://www.w3schools.com/asp/func_instr.asp .

यह एक शब्दकोश का उपयोग करने की तुलना में कम शुद्धतावादी है लेकिन इसके बारे में जागरूक होने के लायक है।

2
Vanquished Wombat 13 फरवरी 2017, 20:12

हालांकि मैं उपरोक्त उत्तर से सहमत हूं, इंस्ट्र फ़ंक्शन का उपयोग करके, एक विकल्प है। आपका प्रश्न पूछ रहा है कि मूल्यों का परीक्षण करने के लिए सरणी के माध्यम से पुनरावृति कैसे करें। For..Next लूप का उपयोग करें। नीचे कोड उदाहरण।

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

उम्मीद है ये मदद करेगा।

2
StackHound25 14 फरवरी 2017, 19:30

एक शब्दकोश का प्रयोग करें और एक सरल सशर्त का प्रयोग करें।

<%
set obj = server.createObject("scripting.dictionary")

obj.add "links", "links"
obj.add "privacy", "privacy"
obj.add "talks", "talks"

if tree <> "" and obj.exists(info)=false then
     'write stuff
end if

set obj = nothing
%>
2
Robert Simpson 16 फरवरी 2017, 23:26

यहाँ सरणी के माध्यम से पुनरावृति करने का सबसे सरल तरीका है क्योंकि आपने इसके बारे में विशेष रूप से पूछा है।

    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
Daniel 27 फरवरी 2017, 17:15
@ StackHound25 के उत्तर का खराब संस्करण (गलत ubound, कोई निकास नहीं)
 – 
Ekkehard.Horner
27 फरवरी 2017, 17:28
@ एक्केहार्ड। स्टैकहाउंड के उत्तर का हॉर्नर सरल संस्करण और गलत नहीं। सरणी सदस्यता 0, 1 और 2 को स्पर्श करेगी। जबकि UBound मान वास्तव में यहां 3 हो सकता है, ऐसा नहीं है कि लूप कैसे लिखा जाएगा। मैं जानबूझकर यूबाउंड का उपयोग नहीं करता जब सरणी आकार ज्ञात और निश्चित होता है, मुझे लगता है कि व्यक्तिगत वरीयता। और बाहर निकलें "यहां सामान करें" के अंतर्गत आता है। मैंने सोचा कि यह स्पष्ट होगा। इतने सारे लोग यहाँ पर डाउनवोट करने के लिए इतनी जल्दी क्यों हैं?
 – 
Daniel
27 फरवरी 2017, 17:38
क्योंकि बहुत से लोग निम्न-गुणवत्ता वाले कोड पोस्ट करते हैं और अपनी भूलों के लिए लंगड़े बहाने ढूंढते हैं ('व्यक्तिगत वरीयता', 'निकास' संभवतः 'डू स्टफ हियर विद मैच' के अंतर्गत कैसे आ सकता है?)
 – 
Ekkehard.Horner
27 फरवरी 2017, 17:46
1
@ एक्केहार्ड। हॉर्नर मुझे एक ब्रेक दें, यह स्पष्ट है कि आप सिर्फ डाउनवोटिंग कर रहे हैं क्योंकि आपके पास यहां एक उत्तर है। बाहर निकलें निश्चित रूप से "यहां सामान करें" के अंतर्गत आता है क्योंकि "यहां सामान करें" का अर्थ है कि आपको मिलान मूल्य के साथ क्या करना है और बाहर निकलना जरूरी नहीं है कि उसे यहां क्या करने की आवश्यकता हो सकती है। बाहर निकलना ही एकमात्र विकल्प नहीं है इसलिए मैंने इसे शामिल किया। भले ही, उत्तर काम करता है और सरल है। यही मैं ओपी प्रदान करने की कोशिश कर रहा था क्योंकि किसी और के पास नहीं है।
 – 
Daniel
27 फरवरी 2017, 17:58