兩組字串數據,需要比較其中相同的數據,並將其值相加並組成一個新的字串數據a1=sp2=20;sp1=34;
a2=sp3=2;sp2=3;sp1=4;
兩組字串數據,將字串中相同的數據值相加後得到新的一組數據
即sp3=2;sp2=23;sp1=38
(ps 一個簡單的應用:商品二原有數量20件,商品一原有數量34件,新進貨或者新出售了商品二3件,商品一4件等類型模擬情況下計算出進貨量,銷售量和庫存量,小型的進銷存系統可採用這樣的方法)
那麼如何實現兩組字串資料比較合併相同資料呢?
第一,將兩組字串資料進行連接組合
a3=a1&a2
那麼a3=sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;
第二,將a3中相同的數據進行值的相加
這裡主要解決的是如何找到相同的數據
首先因為現在a3就是由sp2、sp1、sp3、sp2和sp1組成,所以需要把相同的sp2和sp1單獨找出來再進行值得相加。
透過split函數分割;為分隔符號獲得每塊資料和值。
即s_array = split(a3,;)透過for i = 0 to ubound(s_array)循環我們可以得到單獨的各項資料及值
其中每項的格式是類似sp2=20,要將sp2提取出來才能和同組中的資料進行比較,所以還需要獨立函數來擷取
Function getSPName(sp)
getSPName = split(sp,=)(0)
End Function
Function getSPNum(sp)
getSPNum = split(sp,=)(1)
end function
分別獲得=前的資料名稱和=後的資料值。
其次每塊資料都分解下來了,就是如何尋找到相同的資料名稱。
我們假設這樣的流程,首先將a3數組中的第一元素提取,通過和除第一元素之前以為的數據進行比較,如果有相同則進行相加。
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
我們獲得了最終的值可以隨時將值賦到新的動態數組中,組合成最終的組合資料數組
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
這個裡面勢必會遇到這樣的一個情況:當a3數組中的其後的某一元素總會與之前比較的相同的元素進行了運算,所以該元素就不能計入for i = 0 to ubound(s_array )內的result(p) = getSPName(s_array(i)) & = & Nums動態陣列中去。
如何解決不再運算比較已經被比較運算過的元素
我們必須將已經比較運算過的元素進行標記,例如a3數組中(a3=sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;)取出sp2=20後會比較運算後一個sp2=3,此時比較運算後將sp2=3的陣列元素編號標記,下次循環比較時此元素不計。
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就是將目前比較相同的該元素標記,並賦值於動態數組id(q),q預設定義為0,再次循環q=q+1
那麼有力該標記,我們就可以有選擇性的選擇比較累加了。
定義函數
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
主要函數為
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
整體函數為
<%
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
%>