2013-07-26 6 views
5

के साथ vbscript में एक सरणी को कैसे कार्यान्वित करें मैं भविष्य में अपडेट करना आसान बनाने के लिए वेबपृष्ठ का एक हिस्सा फिर से डिजाइन कर रहा हूं। वर्तमान में, यह टेबल की एक श्रृंखला है, जो हार्ड-कोडेड हैं। तालिका को फिर से डिजाइन करने के लिए (उदाहरण के लिए, जैसा कि मैं चाहता हूं उसे वर्णित करने के लिए), HTML में बहुत सारे मान मैन्युअल रूप से स्वैप करने की आवश्यकता है।एक वैरिएबल आकार

यह वही है जो मैं करना चाहता हूं: क्रमशः प्रदर्शन नाम और यूआरएल रखने के लिए एक शीर्षक और लिंक चर के साथ एक url_Link ऑब्जेक्ट बनाएं। url_Link ऑब्जेक्ट्स की एक सरणी बनाएं, और पेज के लिए .asp फ़ाइल के शीर्ष पर इसे पॉप्युलेट करें। तालिका बनाने और पॉप्युलेट करने के लिए उन सरणी पर प्रत्येक लूप के लिए प्रदर्शन करें

यह स्वयं इतना बुरा नहीं है, लेकिन मैं दो समस्याओं में भाग लेता हूं। सबसे पहले, मैं सरणी आकार को परिभाषित नहीं करना चाहता, क्योंकि यह दूसरी जगह बनाता है जिसे लिंक की संख्या में परिवर्तन किए जाने पर बदला जाना चाहिए। कुछ url_Link ऑब्जेक्ट्स को प्रदर्शित होने से रोकने के लिए कुछ तर्क होंगे (उदाहरण के लिए, कुछ उपयोगकर्ता कुछ पृष्ठों तक नहीं पहुंच सकते हैं, इसलिए वे लिंक नहीं देखेंगे), और यह सरणी का आकार बदलने पर समस्याएं पैदा करेगा।

मुझे पता है कि मैं केवल बड़े आकार के सरणी बना सकता हूं, लेकिन यह मेरे लिए अपर्याप्त लगता है (और मुझे नहीं पता कि प्रत्येक कार्य के लिए कैसे और खाली पंक्तियों का समूह नहीं दिखाना चाहिए)।

इन समस्याओं को हल करने के लिए मैं क्या कर सकता हूं? मैं vbscript में बहुत जानकार नहीं हूं, और जिस कोड के साथ मैं काम कर रहा हूं, वह सरणी या वस्तुओं का लाभ नहीं लेता है।

अद्यतन: मैंने एक oversim सरणी के अतिरिक्त वसा को ट्रिम करने के लिए एक Redim PRESERVE का उपयोग करने का प्रयास किया है। समस्या यह है कि कुछ मामलों में, मेरी सरणी शर्तों के कारण अपने अधिकतम आकार की तुलना में वस्तुओं की छोटी मात्रा से आबादी में आती है। यह बाद में समस्याएं पैदा कर रहा है जब मैं लूप का उपयोग करता हूं (प्रत्येक को काम करने के लिए एक पाने की कोशिश की जाती है और यह इस समय नहीं हो रहा है)। मैं त्रुटि मिलती है "यह सरणी तय हो गई है या अस्थायी रूप से बंद कर दिया" ReDim लाइन पर

कोड:

dim systemSettingsArray(1) 
    arrayCounter = 0 
    if ADMIN = "Y" then 
     set systemSettingsArray(arrayCounter) = (new url_Link).Init("Account Administration","Maintenance/Account_Admin.asp") 
     arrayCounter = arrayCounter + 1 
    end if 
    set systemSettingsArray(arrayCounter) = (new url_Link).Init("Time Approval","Maintenance/system_Time_Approval.asp") 
    redim Preserve systemSettingsArray(arrayCounter) 
+2

"मंद ए (1)" एक निश्चित (गैर-रीडीम-सक्षम) सरणी बनाता है जिसमें 2 तत्वों को अनुक्रमित 0 और 1 तत्व शामिल हैं। "Dim a: a = Array()" या "redim a (-1)" का उपयोग करें एक खाली ReDim- सक्षम सरणी बनाएँ। –

उत्तर

5

उपयोग ReDim सरणी पर की रक्षा। आप UBound का उपयोग तत्वों की वर्तमान संख्या को खोजने के लिए कर सकते हैं और

ReDim Preserve myArrayName (UBound(myArrayName) + 1) 

http://msdn.microsoft.com/en-us/library/c850dt17%28v=vs.84%29.aspx

+1

मैंने कोशिश की, और मुझे एक त्रुटि मिली यह सरणी तय या अस्थायी रूप से बंद है। कोड –

+3

मार्शल से ऊपर जोड़ा गया: सुनिश्चित करें कि जब आप प्रारंभ में सरणी चर को मंद करते हैं तो आपके सरणी कोष्ठक खाली होते हैं। मेरे द्वारा पोस्ट किए गए लिंक में टिप्पणी अनुभाग देखें, वे इसे आकस्मिक रूप से उल्लेख करते हैं लेकिन यह एक बड़ा सौदा है। आपको खाली माता-पिता के साथ इसे मंद करने की आवश्यकता होगी, और फिर तुरंत इसे फिर से करें। –

3

की तरह कुछ करना VBScript में गतिशील सरणियों उपयोग करने के लिए सही रास्ता दिखाने के लिए और मैट की टिप्पणी गलत साबित करने के लिए:

Option Explicit 

ReDim a(-1) 
Dim b : b = Array() 
Dim c() 
Dim i 
For i = 0 To 1 
    ReDim Preserve a(UBound(a) + 1) : a(UBound(a)) = i 
    ReDim Preserve b(UBound(b) + 1) : b(UBound(b)) = i 
    On Error Resume Next 
    ReDim Preserve c(UBound(c) + 1) : c(UBound(c)) = i 
    WScript.Echo Err.Description, "- caused by Dim c()" 
    On Error GoTo 0 
Next 
WScript.Echo "a:", Join(a) 
WScript.Echo "b:", Join(b) 

उत्पादन:

Subscript out of range - caused by Dim c() 
Subscript out of range - caused by Dim c() 
a: 0 1 
b: 0 1 

अद्यतन wrt टिप्पणी:

दोनों ए और बी रास्ता सही हैं - यदि आप एक एक आयामी गतिशील सरणी जो UBound() शुरू से ही लागू किया जा सकता करने के लिए मिलता है। कुछ लोग बी पसंद कर सकते हैं, क्योंकि उन्हें पिछले Dim v के बिना ReDim v पसंद नहीं है; अन्य महसूस कर सकते हैं कि बी बेकार या त्रुटिपूर्ण है।

यदि आप this problem about a two-dimensional array पर देखते हैं, तो आप निष्कर्ष पर आ सकते हैं कि एक तरीका बेहतर है।

+0

@ Styne666 - कृपया अपडेट देखें। –

संबंधित मुद्दे