欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

asp兩組字符串?dāng)?shù)據(jù)比較合并相同數(shù)據(jù)

 更新時間:2008年08月06日 09:44:41   作者:  
兩組字符串?dāng)?shù)據(jù),需要比較其中相同的數(shù)據(jù),并將其值相加并組成一個新的字符串?dāng)?shù)據(jù)
a1="sp2=20;sp1=34;"
a2="sp3=2;sp2=3;sp1=4;"
兩組字符串?dāng)?shù)據(jù),將字符串中相同的數(shù)據(jù)值相加后得到新的一組數(shù)據(jù)
即“sp3=2;sp2=23;sp1=38”

(p.s 一個簡單的應(yīng)用:商品二原有數(shù)量20件,商品一原有數(shù)量34件,新進(jìn)貨或者新出售了商品二3件,商品一4件等類型模擬情況下計算出進(jìn)貨量,銷售量和庫存量,小型的進(jìn)銷存系統(tǒng)可采用這樣的方法)

那么如何實現(xiàn)兩組字符串?dāng)?shù)據(jù)比較合并相同數(shù)據(jù)?

第一,將兩組字符串?dāng)?shù)據(jù)進(jìn)行連接組合

a3=a1&a2
那么a3="sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;"

第二,將a3中相同的數(shù)據(jù)進(jìn)行值的相加

這里主要解決的是如何尋找到相同的數(shù)據(jù)

首先因為現(xiàn)在a3就是由 sp2、sp1、sp3、sp2和sp1組成,需要把相同的sp2和sp1單獨找出來再進(jìn)行值得相加。

通過split函數(shù)分割“;”為分隔符獲得每塊數(shù)據(jù)和值。
即 s_array = split(a3,";")通過for i = 0 to ubound(s_array)循環(huán)我們可以獲得單獨的各項數(shù)據(jù)及值

其中每項的格式是類似“sp2=20”,要將sp2提取出來才能和同組中的數(shù)據(jù)進(jìn)行比較,所以還需要獨立函數(shù)進(jìn)行提取

Function getSPName(sp)
    getSPName = split(sp,"=")(0)
End Function

Function getSPNum(sp)
    getSPNum = split(sp,"=")(1)
end function

分別獲得“=”前的數(shù)據(jù)名稱和“=”后的數(shù)據(jù)值。

其次每塊數(shù)據(jù)都分解下來了,就是如何尋找到相同的數(shù)據(jù)名稱。
我們假設(shè)這樣的流程,首先將a3數(shù)組中的第一元素提取,通過和除第一元素之前以為的數(shù)據(jù)進(jìn)行比較,如果有相同則進(jìn)行相加。


s_array = split(a3,";")
for i = 0 to ubound(s_array)
    for j=i+1 to ubound(s_array)
        if getSPName(s_array(i)) = getSPName(s_array(j)) then
        Nums = Nums + Cint(getSPNum(s_array(j)))
        end if
    next
next

 

我們獲得了最終的值可以隨時將值賦到新的動態(tài)數(shù)組中,組合成最終的“組合數(shù)據(jù)”數(shù)組
redim Preserve result(p)
result(p) = getSPName(s_array(i)) & "=" & Nums



s_array = split(a3,";")
for i = 0 to ubound(s_array)
    for j=i+1 to ubound(s_array)
        if getSPName(s_array(i)) = getSPName(s_array(j)) then
        Nums = Nums + Cint(getSPNum(s_array(j)))
        end if
    next

    redim Preserve result(p)
    result(p) = getSPName(s_array(i)) & "=" & Nums
    p=p+1
next

 


這個里面勢必會遇到這樣的一個情況:當(dāng)a3數(shù)組中的其后的某一元素總會與之前比較的相同的元素進(jìn)行了運算,所以該元素就不能計入 for i = 0 to ubound(s_array)內(nèi)的result(p) = getSPName(s_array(i)) & "=" & Nums動態(tài)數(shù)組中去。

如何解決不再運算比較已經(jīng)被比較運算過的元素

我們必須對已經(jīng)比較運算過的元素進(jìn)行標(biāo)記,比如a3數(shù)組中(a3="sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;")取出sp2=20后會比較運算到后一個sp2=3,此時比較運算后將sp2=3的數(shù)組元素編號進(jìn)行標(biāo)記,下次循環(huán)比較時該元素不計在內(nèi)。


s_array = split(a3,";")
for i = 0 to ubound(s_array)
    for j=i+1 to ubound(s_array)
        if getSPName(s_array(i)) = getSPName(s_array(j)) then
        Nums = Nums + Cint(getSPNum(s_array(j)))
        end if

        redim Preserve ID(q)
        ID(q) = j
        q = q + 1
    next

    redim Preserve result(p)
    result(p) = getSPName(s_array(i)) & "=" & Nums
    p=p+1
next

 

其中定義ID(q)=j就是將當(dāng)前比較相同的該元素標(biāo)記,并賦值于動態(tài)數(shù)組id(q),q默認(rèn)定義為0,再次循環(huán)q=q+1
那么有力該標(biāo)記,我們就可以有選擇性的選擇比較累加了。
定義函數(shù)


function IsInID(j)
    dim x
    IsInID = false
    for each x in ID
        if x = j then 
            IsInID = true
            exit function
        End if
    Next
end function

 


主要函數(shù)為


function mainhb(s)
s_array = split(s,";")
    for i = 0 to ubound(s_array)
        if not IsInID(i) then
            Nums = getSPNum(s_array(i))
            for j=i+1 to ubound(s_array)
                if getSPName(s_array(i)) = getSPName(s_array(j)) then 
                    Nums = Nums + Cint(getSPNum(s_array(j)))
                    redim Preserve ID(q)
                    ID(q) = j
                    q = q + 1
                end if
            next

            redim Preserve result(p)
            result(p) = getSPName(s_array(i)) & "=" & Nums
            p = p + 1
        end if
    next

    for each x in result
        mainhb=mainhb&x&";"
    next
end function

 


整體函數(shù)為


<%
dim result()
dim ID()
dim p , q , Nums

p=0
q= 0 
Nums = 0

redim Preserve ID(q)
ID(q) = ""

s = "sp4=33;sp2=20;sp1=34;sp3=2;sp2=3;sp4=4;"
s = left(s,len(s)-1)
response.write mainhb(s)

function mainhb(s)
s_array = split(s,";")
    for i = 0 to ubound(s_array)
        if not IsInID(i) then 
            Nums = getSPNum(s_array(i))
            for j=i+1 to ubound(s_array)
                if getSPName(s_array(i)) = getSPName(s_array(j)) then 
                    Nums = Nums + Cint(getSPNum(s_array(j)))
                    redim Preserve ID(q)
                    ID(q) = j
                    q = q + 1
                end if
            next

            redim Preserve result(p)
            result(p) = getSPName(s_array(i)) & "=" & Nums
            p = p + 1
        end if
        'Nums = 0
    next

    for each x in result
        mainhb=mainhb&x&";"
    next
end function

Function getSPName(sp)
    getSPName = split(sp,"=")(0)
End Function


Function getSPNum(sp)
    getSPNum = split(sp,"=")(1)
end function

function IsInID(j)
    dim x
    IsInID = false
    for each x in ID
        if x = j then 
            IsInID = true
            exit function
        End if
    Next
end function
%> 

相關(guān)文章

最新評論