• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    asp两组字符串数据比较合并相同数据
    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=a1a2
    那么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=mainhbx";"
        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=mainhbx";"
        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需再刷新一下页面才能执行]
    上一篇:Access数据库中“所有记录中均未找到搜索关键字”的解决方法
    下一篇:AJAX简单应用实例-弹出层
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    asp两组字符串数据比较合并相同数据 asp,两组,字符串,数据,比较,