asp两组字符串数据比较合并相同数据_ASP教程-查字典教程网
asp两组字符串数据比较合并相同数据
asp两组字符串数据比较合并相同数据
发布时间:2016-12-29 来源:查字典编辑
摘要: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,";")通过fori=0toubound(s_array)循环我们可以获得单独的各项数据及值

其中每项的格式是类似“sp2=20”,要将sp2提取出来才能和同组中的数据进行比较,所以还需要独立函数进行提取

FunctiongetSPName(sp)

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

EndFunction

FunctiongetSPNum(sp)

getSPNum=split(sp,"=")(1)

endfunction

分别获得“=”前的数据名称和“=”后的数据值。

其次每块数据都分解下来了,就是如何寻找到相同的数据名称。

我们假设这样的流程,首先将a3数组中的第一元素提取,通过和除第一元素之前以为的数据进行比较,如果有相同则进行相加。

s_array=split(a3,";")

fori=0toubound(s_array)

forj=i+1toubound(s_array)

ifgetSPName(s_array(i))=getSPName(s_array(j))then

Nums=Nums+Cint(getSPNum(s_array(j)))

endif

next

next

我们获得了最终的值可以随时将值赋到新的动态数组中,组合成最终的“组合数据”数组

redimPreserveresult(p)

result(p)=getSPName(s_array(i))&"="&Nums

s_array=split(a3,";")

fori=0toubound(s_array)

forj=i+1toubound(s_array)

ifgetSPName(s_array(i))=getSPName(s_array(j))then

Nums=Nums+Cint(getSPNum(s_array(j)))

endif

next

redimPreserveresult(p)

result(p)=getSPName(s_array(i))&"="&Nums

p=p+1

next

这个里面势必会遇到这样的一个情况:当a3数组中的其后的某一元素总会与之前比较的相同的元素进行了运算,所以该元素就不能计入fori=0toubound(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,";")

fori=0toubound(s_array)

forj=i+1toubound(s_array)

ifgetSPName(s_array(i))=getSPName(s_array(j))then

Nums=Nums+Cint(getSPNum(s_array(j)))

endif

redimPreserveID(q)

ID(q)=j

q=q+1

next

redimPreserveresult(p)

result(p)=getSPName(s_array(i))&"="&Nums

p=p+1

next

其中定义ID(q)=j就是将当前比较相同的该元素标记,并赋值于动态数组id(q),q默认定义为0,再次循环q=q+1

那么有力该标记,我们就可以有选择性的选择比较累加了。

定义函数

functionIsInID(j)

dimx

IsInID=false

foreachxinID

ifx=jthen

IsInID=true

exitfunction

Endif

Next

endfunction

主要函数为

functionmainhb(s)

s_array=split(s,";")

fori=0toubound(s_array)

ifnotIsInID(i)then

Nums=getSPNum(s_array(i))

forj=i+1toubound(s_array)

ifgetSPName(s_array(i))=getSPName(s_array(j))then

Nums=Nums+Cint(getSPNum(s_array(j)))

redimPreserveID(q)

ID(q)=j

q=q+1

endif

next

redimPreserveresult(p)

result(p)=getSPName(s_array(i))&"="&Nums

p=p+1

endif

next

foreachxinresult

mainhb=mainhb&x&";"

next

endfunction

整体函数为

<%

dimresult()

dimID()

dimp,q,Nums

p=0

q=0

Nums=0

redimPreserveID(q)

ID(q)=""

s="sp4=33;sp2=20;sp1=34;sp3=2;sp2=3;sp4=4;"

s=left(s,len(s)-1)

response.writemainhb(s)

functionmainhb(s)

s_array=split(s,";")

fori=0toubound(s_array)

ifnotIsInID(i)then

Nums=getSPNum(s_array(i))

forj=i+1toubound(s_array)

ifgetSPName(s_array(i))=getSPName(s_array(j))then

Nums=Nums+Cint(getSPNum(s_array(j)))

redimPreserveID(q)

ID(q)=j

q=q+1

endif

next

redimPreserveresult(p)

result(p)=getSPName(s_array(i))&"="&Nums

p=p+1

endif

'Nums=0

next

foreachxinresult

mainhb=mainhb&x&";"

next

endfunction

FunctiongetSPName(sp)

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

EndFunction

FunctiongetSPNum(sp)

getSPNum=split(sp,"=")(1)

endfunction

functionIsInID(j)

dimx

IsInID=false

foreachxinID

ifx=jthen

IsInID=true

exitfunction

Endif

Next

endfunction

%>

dim result(),ID(),p , q , Nums p=0 q= 0 Nums = 0 redim Preserve ID(q) ID(q) = "" a1="a=2;b=4;d=2;" a2="c=1;a=6;e=5;b=2;" s=a1&a2 s = left(s,len(s)-1) alert 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

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新ASP教程学习
    热门ASP教程学习
    编程开发子分类