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=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
%>

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需刷新才能执行]

(0)

相关推荐

  • 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件等类型模拟情况下计算出进货量,销售量和库存量,小型的进销存系统可采用这样的方法) 那么如何实现两组字符串数据比较合并相同数据? 第一,将两组字符

  • php分割合并两个字符串的函数实例

    本文实例讲述了php分割合并两个字符串的函数.分享给大家供大家参考.具体实现方法如下: 这里实现把两个字符串进行分割合并,例如str1=aaaa,str2=bbbb,合并后生成abababab /** * Merges two strings in a way that a pattern like ABABAB will be * the result. * * @param string $str1 String A * @param string $str2 String B * @ret

  • ASP.NET中GridView和Repeater重复数据如何合并

    这几天做一个项目有用到表格显示数据的地方,客户要求重复的数据列需要合并,就总结了一下GridView 和 Repeater 关于重复数据合并的方法. 效果图如下 : GridView : 前台代码 : <div> <asp:GridView ID="gvIncome" runat="server" AutoGenerateColumns="False"> <Columns> <asp:TemplateFi

  • python中将两组数据放在一起按照某一固定顺序shuffle的实例

    有的时候需要将两组数据,比如特征和标签放在一起随机打乱, 但是又想记录这种打乱的顺序,那么该怎么做呢?下面是一个很好的方法: b = [1, 2,3, 4, 5,6 , 7,8 ,9] a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h','i'] c = list(zip(a, b)) print(c) random.Random(100).shuffle(c) print(c) a, b = zip(*c) print(a) print(b) 输出: [('

  • 基于python实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码 # TTest.py # -*- coding: utf-8 -*- ''' # Created on 2020-05-20 20:36 # TTest.py # @author: huiwenhua ''' ## Import the packages import numpy as np from scipy import stats def get_p_value(arrA

  • 利用vue对比两组数据差异的可视化组件详解

    目录 需求: 大概要点: 根据刚才的要点可以建立一下组件的props: 组件的基本样式也很简单: 完事了,最后贴一下完整代码: 使用示例: 效果预览: 扩展功能TODO: 总结 如题,朋友有个这样的需求,感觉挺常见,发出来给大家参考一下 需求: 用el-table展示两组数据,有差异的单元格显示红色,新增的显示整行绿色 大概要点: 需要一个数据组,里面包含两组需要对比的数据 需要一个唯一的key,用来确定某一行的数据是否在其他数据中存在(是否是新增 接受一个表格列的配置,用于渲染表格,同时对比差

  • asp 读取通过表单发送的post数据

    学习ASP,最重要的就是要掌握ASP内置的六大对象.事实上,在上一讲中,我们已经了解了Response对象,及Response对象中最常用的Write方法.Redirect方法和Expires属性.看到对象.方法.属性.集合.事件这些概念(俺一个都不识!),如果以前没接触过,聪明的您就不要管这些概念了,知道怎么用就行了,我的观点是刚开始关键在于临摹.下面我们继续通过实例学习Request对象,为了加深理解,务请运行这些程序看看输出结果. 一. 使用Request.ServerVariables获

  • python如何将两个txt文件内容合并

    本文实例为大家分享了python将两个txt文件内容合并的具体代码,供大家参考,具体内容如下 分析: 先分别将两个文件中的内容读入列表中,再将列表分割 把不同属性的数据放到单独的列表中 分开存储  name tel  email 然后遍历列表查找重合的姓名. 利用字符串方法join() 将 三个属性合并,然后保存在临时列表 最后将新的列表变量写入新文件中 file1 = open("name,tel.txt", "rb") file2 = open("na

  • PostgreSQL 字符串拆分与合并案例

    我就废话不多说了,大家还是直接看代码吧~ with person_name as ( select c.id, array_to_string(array_agg(distinct p.c_name), ' , ') as p_name from biz_notification_config c join biz_notification_person p on p.id = any (string_to_array(c.persons, ',')::int[]) group by c.id

  • asp.net实现Postgresql快速写入/读取大量数据实例

    最近因为一些项目需要大量插入数据,研究了下asp.net实现Postgresql快速写入/读取大量数据,所以留个笔记 环境及测试 使用.net驱动npgsql连接post数据库.配置:win10 x64, i5-4590, 16G DDR3, SSD 850EVO. postgresql 9.6.3,数据库与数据都安装在SSD上,默认配置,无扩展. CREATE TABLE public.mesh ( x integer NOT NULL, y integer NOT NULL, z integ

随机推荐