2010-10-19 25 views
5

dizindeki birleştirme ASP classic için bir array_merge işlevi üzerinde çalışıyorum. Sahip olduğum şey, bir (veya her ikisi) param dizisi boş ya da dizisiz olana kadar çalışıyor gibi görünüyor. İşte ben bugüne kadar ne var: çizgi merged(right_size + i + 1) = right(i) itibarenASP klasik

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

:

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 

hatası alıyorum. Nereye gittiğime dair herhangi bir bilgelik var mı?

+0

Bu hatayı aldığınızda girdi neydi? –

+2

Sadece bunu dışarı atmak - 'SOL 've' SAĞ' 'VBScript’deki fonksiyonlardır. Kodun aslında sağ (i) 'üzerinde barfing olması mümkün mü? Fonksiyonun parametre isimlerini değiştirmek isteyebilirsiniz. – LittleBobbyTables

cevap

5

LittleBobbyTables haklı, parametreleri değiştirmelisiniz. Sana bağlı olarak düşünüyorum

nesne için ekstra bir çek konuyu çözebilir girişler

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 

Bazı deneme kodunda:

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

Soldan yineleme yapmak yerine, neden redimsi sol (total_size) koru ve sonra sağdaki değerleri ona ekleyemez? –

0

Ben bu soruyu biraz eski olduğunu biliyorum ama bir şey olduğunu düzeltmeniz gerekir, böylece iki diziden tüm değerleri elde edebilirsiniz.

Sayacı, İKİNCİ, ilk yaptığınız gibi yaptığınız gibi yükseltmeniz gerekir. Aksi takdirde, ikinci diziden bir değer atanmayacaktır.

örnek olarak bu kodu atın: Paolo PTA cevabı

''//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

Kafam karıştı mı bu bir soru mu cevap mı? – Lankymart

+0

Sorunun çözülmesi OP'nin kodu için önerilen bir değiştirme olduğunu açık değil mi? Array_merge adlı bir işlevi bildirir ve yanıt "böyle ve böyle yapmak için böyle yapmanız gerekir" diyor. Kodu ayrıntılı olarak incelemedim, ancak neden işaretlendiğini bile bilmiyorum. Belki "biz" ile "siz" değiştirirsek, bunun bir cevap olduğu daha açık olur mu? – GreenAsJade

+0

@GreenAsJade Bunun bir yanıt olduğunu ve düzenlediğini fark ettiğiniz için teşekkür ederiz. İşaretli gönderileri incelerken hata için özür dilerim. –

0

Küçük verimliliğini iyileştirme. Arr1 ile tekrarlamaya gerek yok; sadece "redim koru".

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