2013-07-19 5 views
5

एक उदाहरण के रूप में निम्न सरणी को देखते हुए में एक सरणी से एक तत्व को नष्ट ...क्लासिक एएसपी

arr(0)(0) = 3 
arr(0)(1) = name 
arr(0)(2) = address 
arr(1)(0) = 7 
arr(1)(1) = name 
arr(1)(2) = address 
arr(2)(0) = 14 
arr(2)(1) = name 
arr(2)(2) = address 

मैं सरणी से मध्य तत्व (आईडी = 7) को हटाने के लिए की जरूरत है। मैं समझता हूं कि मुझे सरणी के माध्यम से लूप करने और प्रत्येक रिकॉर्ड को स्थानांतरित करने की आवश्यकता है जिसे एक नई सरणी में हटाया जाना नहीं है। मैं इस तरह की कोशिश की ...

Dim newArr,i 
Redim newArr(Ubound(arr)) 

For i = 0 to Ubound(arr) 
    If (CStr(arr(i)(0)) <> 7) Then 
     newArr(i) = arr(i) 
    End if 
Next 

जब यह डिबगिंग मैं अगर बयान काम देख सकते हैं तो मैं जानता हूँ कि केवल 2 तत्वों कॉपी कर रहे हैं लेकिन newArr इस के अंत में खाली है। मैं क्या खो रहा हूँ। मैं एक PHP कोडर हूं जो क्लासिक एएसपी के लिए नया है और आईएम में सरणी कार्य करने के लिए उपयोग किया जाता है जो इस तरह की चीज़ को अनावश्यक बनाता है। किसी भी मदद की सराहना की। धन्यवाद।

+0

मुझे scripting.dictionary के बारे में पता है, हालांकि, प्रश्न में सरणी एक बहुत बड़ी साइट पर उपयोग की जाती है और मुझे इस बिंदु पर इसे बदलने की पहुंच नहीं है। –

+1

वास्तव में कोई समाधान नहीं है लेकिन: यह एक एएसपी समस्या नहीं है। एएसपी आपके मामले VBscript में, स्क्रिप्टिंग भाषा के लिए सिर्फ एक कंटेनर है। इसलिए आपकी समस्या एक वीबीस्क्रिप्ट समस्या है। यह ज्ञान आपको Google को और अधिक सफलतापूर्वक खोजने में मदद कर सकता है। – Jeff

उत्तर

3

आप नई सरणी की जरूरत नहीं है, आप केवल वस्तुओं को फिर से सौंप सकते हैं और सरणी "फसल" कर सकते हैं:

Const removalIndex = 1 
For x=removalIndex To UBound(arr)-1 
    arr(x) = arr(x + 1) 
Next 
ReDim Preserve arr(UBound(arr) - 1) 

यह कोड मुख्य सरणी से अनुक्रमणिका 1 पर सरणी आइटम को हटा देगा। यदि आप अग्रिम में आइटम की अनुक्रमणिका को हटाने के लिए नहीं जानते हैं, तो आप आसानी से सरणी पर एक साधारण लूप के साथ इसे पा सकते हैं।

6

सरणी का उपयोग करने के बजाय आप Scripting.Dictionary को आज़मा सकते हैं।

यह अधिक लचीला है, और इसमें Remove विधि है।

+0

दुर्भाग्य से मुझे सरणी के निर्माण तक पहुंच नहीं है। यह एक बहुत बड़ी साइट है और प्रश्न में सरणी का उपयोग पूरे समय में किया जाता है। इस बिंदु से दूर जाने के लिए संभव नहीं है। –

4

मैं Scripting.Dictionary का उपयोग करने का सुझाव देता हूं और इसके बजाय इसे सूची/संग्रह के रूप में उपयोग करता हूं, क्योंकि यह सम्मिलन और हटाने के लिए अनुमति देता है। यहां देखें: Lists in VBScript

0

मुझे निश्चित उत्तर नहीं पता है, लेकिन अगर मैं अंधेरे अनुमान में एक स्टैब लेना चाहता हूं तो मैं सुझाव दूंगा कि चूंकि सरणी दो आयामी हो सकती है, शायद आपको इसे स्पष्ट रूप से इस तरह से संदर्भित करना होगा ?

Dim newArr,i 
Redim newArr(Ubound(arr),3) 

For i = 0 to Ubound(arr) 
    If (CStr(arr(i)(0)) <> 7) Then 
     newArr(i)(0) = arr(i)(0) 
     newArr(i)(1) = arr(i)(1) 
     newArr(i)(2) = arr(i)(2) 
    End if 
Next 
0

मुझे कुछ वीबीस्क्रिप्ट वाक्यविन्यास मुद्दे दिखाई देते हैं। पहली:

arr(0)(0) = 3 'ERROR: Subscript out of range 
arr(0, 0) = 3 'CORRECT 

अगला:

ReDim newArr(Ubound(arr)) 'this is 1 dimensional array 
newArr(0) = arr(0)   'this will NOT work 
newArr(0) = arr(0, 0)  'this will work 

और अंत में: तुम क्यों String में बदलने और उसके बाद के साथ एक Integer की तुलना:

(CStr(arr(i)(0)) <> 7) 
संबंधित मुद्दे