2010-10-19 18 views
5

में ऐरे विलय मैं एएसपी क्लासिक के लिए array_merge फ़ंक्शन पर काम कर रहा हूं। मुझे लगता है कि एक (या दोनों) पैराम खाली हैं या सरणी नहीं है। यहाँ मैं अब तक है:एएसपी क्लासिक

function array_merge(left, right) 
    dim total_size 
    dim i 
    dim merged 
    ' Convert "left" to an array 
    if not isArray(left) then 
    left = Array(left) 
    end if 
    ' Convert "right" to an array 
    if not isArray(right) then 
    right = Array(right) 
    end if 
    ' Start with "left" and add the elements of "right" 
    right_size = ubound(right) 
    total_size = ubound(left) + right_size + 1 
    merged = left 
    redim preserve merged(total_size) 
    for i = 0 to ubound(right) 
    merged(right_size + i + 1) = right(i) 
    next 
    ' Return value 
    array_merge = merged 
end function 

मैं त्रुटि मिलती है:

 
Error Type: 
Microsoft VBScript runtime (0x800A01B6) 
Object doesn't support this property or method: 'merged' 
/_inc/nav/left-nav.inc, line 21 

लाइन merged(right_size + i + 1) = right(i) से। कोई ज्ञान जहां मैं गलत जा रहा हूं?

+0

त्रुटि मिलने पर इनपुट क्या था? –

+2

बस इसे बाहर फेंकना - 'बाएं' और 'दाएं' VBScript में कार्य हैं। क्या यह संभव है कि कोड वास्तव में 'दाएं (i)' पर बार्फ़िंग कर रहा हो? आप फ़ंक्शन के पैरामीटर नामों को बदलना चाहेंगे। – LittleBobbyTables

उत्तर

5

LittleBobbyTables सही है, आपको पैरामीटर बदलना चाहिए।

मैं तुम्हें के आधार पर लगता है कि आदानों वस्तु के लिए एक अतिरिक्त जाँच आपकी समस्या का समाधान कर सकता

function array_merge(left, right) 
    dim right_size 
    dim total_size 
    dim i 
    dim merged 
    ''// Convert "left" to an array 
    if not isArray(left) then 
    left = Array(left) 
    end if 
    ''// Convert "right" to an array 
    if not isArray(right) then 
    right = Array(right) 
    end if 
    ''// Start with "left" and add the elements of "right" 

    right_size = ubound(right) 
    total_size = ubound(left) + right_size + 1 

    merged = array() 
    redim merged(total_size) 
    dim counter : counter = 0 

    for i = lbound(left) to ubound(left) 
    if isobject(left(i))then 
     set merged(counter) = left(i) 
    else 
     merged(counter) = left(i) 
    end if 
    counter=counter+1 
    next 

    for i = lbound(right) to ubound(right) 
    if isobject(right(i))then 
     set merged(counter) = right(i) 
    else 
     merged(counter) = right(i) 
    end if 
    next 


    ''// Return value 
    array_merge = merged 
end function 

कुछ Testcode:

dim a: a=100 
dim b: b=200 

dim c: set c=nothing 
dim d: set d=nothing 

dim e: set e=server.createobject("scripting.filesystemobject") 
dim f: set f=server.createobject("scripting.filesystemobject") 


dim x,y,z,zz 

x = array_merge(a,b) 
y = array_merge(c,d) 
z = array_merge(e,f) 
zz = array_merge(a,e) 

response.write x(0) 
response.write x(1) 

''// Accessing Nothing Values throw Error 
''//response.write y(0) 
''//response.write y(1) 

response.write z(0).GetExtensionName("test.doc") 
response.write z(1).GetExtensionName("test.doc") 

response.write zz(0) 
response.write zz(1).GetExtensionName("test.doc") 
+0

बाएं के माध्यम से पुन: प्रयास करने के बजाय, क्यों 'redim बाएं (total_size) को संरक्षित नहीं करते हैं और फिर इसके लिए सही मान जोड़ें? –

0

मैं जानता हूँ कि इस सवाल का एक सा पुराना है, लेकिन वहाँ कुछ है जो आपको ठीक करने की आवश्यकता है, ताकि आप दो सरणी से सभी मान प्राप्त कर सकें।

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

''//Build the Arrays 

Dim a,b,c 
a=array("a1","a2") : b=array("b1","b2") : c=array_merge(a,b) 

''//Run the code 

For Each i In c 
    Response.Write i &"<br />" 
    Next 

''//The main function 

Function array_merge(arr1, arr2) 
    ''//Declare all function variables 
    dim arr1_size,arr2_size,total_size,i,merged,counter 

    ''//Fix empty or none arrays 
    if not isArray(arr1) then arr1 = Array(arr1) end if 
    if not isArray(arr2) then arr2 = Array(arr2) end if 

    ''// Get and set the Arrays Size 
    arr1_size = ubound(arr1) : arr2_size = ubound(arr2) 
    total_size = arr1_size + arr2_size + 1 

    ''//Create a temporary array and assign it a size 
    merged = array() 
    redim merged(total_size) 
    counter = 0 

    ''//Create one single Array with the two others by looping them 
    For i = lbound(arr1) to ubound(arr1) 
     IF isobject(arr1(i)) then 
     set merged(counter) = arr1(i) 
     Else 
     merged(counter) = arr1(i) 
     End if 
     counter=counter+1 
     Next 
    For i = lbound(arr2) to ubound(arr2) 
    If isobject(arr2(i))then 
     set merged(counter) = arr2(i) 
     Else 
     merged(counter) = arr2(i) 
     End if 
     counter=counter+1 
     Next 

    ''// Return the value 
    array_merge = merged 
    End Function 
+0

मैं उलझन में हूं यह एक प्रश्न या उत्तर है? – Lankymart

+0

क्या यह स्पष्ट नहीं है कि यह ओपी के कोड के लिए एक प्रस्तावित प्रतिस्थापन है, जो समस्या हल करता है? यह array_merge नामक एक फ़ंक्शन घोषित करता है, और उत्तर कहता है "आपको ऐसा करने की आवश्यकता है और इस तरह के ऐसे प्राप्त करने के लिए"। मैंने कोड को विस्तार से समीक्षा नहीं की है, लेकिन मुझे स्पष्ट नहीं है कि यह क्यों ध्वजांकित हो रहा है? हो सकता है कि अगर हम "हम" को "आप" से बदल दें तो यह स्पष्ट होगा कि यह एक जवाब है? – GreenAsJade

+0

@GreenAsJade यह ध्यान देने के लिए धन्यवाद कि यह एक उत्तर है और इसे संपादित कर रहा है, इसलिए यह स्पष्ट है। ध्वजांकित पोस्ट की समीक्षा करते समय गलती के बारे में खेद है। –

0

पाओलो Pta के जवाब देने के लिए छोटे दक्षता में सुधार:

एक उदाहरण के रूप में इस कोड है। Arr1 के माध्यम से पुनरावृत्ति करने की कोई आवश्यकता नहीं है; बस इसे "redim संरक्षित" करें।

Function array_merge(arr1, arr2) 
    dim arr1_size, arr2_size, total_size, i, counter 
    if not isArray(arr1) then arr1 = Array(arr1) 
    if not isArray(arr2) then arr2 = Array(arr2) 

    arr1_size = ubound(arr1) : arr2_size = ubound(arr2) 
    total_size = arr1_size + arr2_size + 1 
    counter = arr1_size + 1 
    Redim Preserve arr1(total_size) 
    For i = lbound(arr2) to arr2_size 
     If isobject(arr2(i))then 
      set arr1(counter) = arr2(i) 
     Else 
      arr1(counter) = arr2(i) 
     End if 
     counter = counter + 1 
    Next 
    array_merge = arr1 
End Function 
संबंधित मुद्दे