加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

asp两组字符串数据比较合并一样数据

发布时间:2023-05-27 13:59:11 所属栏目:教程 来源:
导读:两组字符串数据,需要比较其中相同的数据,并将其值相加并组成一个新的字符串数据

a1="sp2=20;sp1=34;"

a2="sp3=2;sp2=3;sp1=4;"

两组字符串数据,将字符串中相同的数据值相加后得到新的一组数据

即&
两组字符串数据,需要比较其中相同的数据,并将其值相加并组成一个新的字符串数据

a1="sp2=20;sp1=34;"
 
a2="sp3=2;sp2=3;sp1=4;"
 
两组字符串数据,将字符串中相同的数据值相加后得到新的一组数据
 
即“sp3=2;sp2=23;sp1=38”
 
(p.s 一个简单的应用:商品二原有数量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
 
%>
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!