2010-10-27 17 views
6

मेरे पास फॉर्म डेटा का एक शब्दकोश है जिसे मैं फ़ंक्शन का उपयोग करके संशोधित करना चाहता हूं।क्या एक वीबीस्क्रिप्ट फ़ंक्शन एक शब्दकोश वापस कर सकता है?

function queryCleanForm(myDictForm) 

    dim arrayKeys 
    arrayKeys = myDictForm.keys 

    for i=0 to myDictForm.count-1 
     myDictForm(arrayKeys(i)) = replace(myDictForm(arrayKeys(i)), "'", "''") 
     response.write myDictForm(arrayKeys(i)) 
    next 

    queryCleanForm = myDictForm 
end function 

समस्या

Wrong number of arguments or invalid property assignment 

वहाँ VBScript में यह करने के लिए एक रास्ता है के रूप में लाइन queryCleanForm = myDictForm त्रुटियों है?

+1

यह प्रश्न http://stackoverflow.com/questions/4038021/vba-return-dictionary-from- कार्यक्षमता के समान ही है जो आपके स्वयं से 5 मिनट पहले पूछता है। – JohnFx

+1

वाह! (न्यूनतम चरित्र आवश्यकता को पूरा करना) – quakkels

उत्तर

14

इस प्रयास करें:

SET queryCleanForm = myDictForm 

वस्तुओं के साथ आप है कि यह एक है सेट का उपयोग करने के VBScript बताने की आवश्यकता ऑब्जेक्ट संदर्भ आप एक मान प्रकार असाइन नहीं कर रहे हैं।

+1

धन्यवाद ... यह अब दर्दनाक रूप से स्पष्ट है :-) – quakkels

1

हाँ, आप सेट कमांड का उपयोग करने की जरूरत है:

सेट queryCleanForm = myDictForm

0

आप फ़ंक्शन में ByRef या ByVal मानों का भी उपयोग कर सकते हैं। ByVal, आपके द्वारा किसी फ़ंक्शन या उप को भेजे गए ऑब्जेक्ट को फ़ंक्शन के अंदर उपयोग करने के लिए निजी स्मृति में कॉपी किया गया है और फ़ंक्शन पूरा होने के बाद त्याग दिया गया है। ByRef, आपके द्वारा किसी फ़ंक्शन में भेजे गए ऑब्जेक्ट को संदर्भित किया जाता है और आपके द्वारा किए गए सभी जोड़ों, कुंजी को हटाने, ऑब्जेक्ट को इत्यादि करने के लिए, सीधे आपके द्वारा भेजे गए ऑब्जेक्ट पर किया जाता है।

उदा।

Sub test 
    DIM testDict as variant 
    call setdict(testDict) 

    testDict.Add "test", "value" 

    call addValue(testDict, "test2","another value") 

    msgbox testDict.Count 

    Set testDict = Nothing 
End Sub 

Sub setdict(ByRef in_Dict as Variant) 
    If Typename(in_Dict) <> "Dictionary" Then 
    SET in_Dict = CreateObject("Scripting.Dictionary") 
    end if 
end sub 

sub addValue(ByRef in_Obj as Variant, ByVal in_Key as String, ByVal in_Value as String) 
if not in_Obj.Exists(in_Key) then 
    in_Obj.Add in_Key, in_Value 
end if 
end sub 

परीक्षण उप उप-सेट के प्रकार प्रकार के चर के साथ कॉल उप कॉल करता है। फ़ंक्शन में मैं सब को भेजे गए ऑब्जेक्ट के प्रकार को मान्य करता हूं। यदि ऑब्जेक्ट प्रकार एक शब्दकोश ऑब्जेक्ट नहीं है (जो यह नहीं है) तो ऑब्जेक्ट in_Dict जो वास्तव में उप परीक्षण में घोषित testDict ऑब्जेक्ट है, को एक शब्दकोश ऑब्जेक्ट पर सेट किया जाएगा।

संदर्भ को बेहतर ढंग से प्रदर्शित करने के लिए मैंने दूसरा उप-नामक जोड़ा भी शामिल किया। मैं ऑब्जेक्ट को फ़ंक्शन पर फिर से संदर्भ के रूप में पास करता हूं और शब्दकोश ऑब्जेक्ट में एक और कुंजी जोड़ता हूं। मुख्य परीक्षण उप बीमार में गिनती पोस्ट करें। इस मामले में 2 कुंजी मौजूद हैं।

+0

इस प्रश्न का पहले से ही * वर्षों * से एक स्वीकार्य उत्तर है ... – alestanis

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