使用2个参数汇总3个字符串中的所有项目

时间:2015-11-18 15:22:20

标签: vbscript

The previous question中,我们总结了yermonth等于的所有项目......但是现在我想要将两个参数(yearmonth和prev value)(10,12,10)相等的所有项目相加。 换句话说,只将Sting1和String2加在一起。

我使用if v(0) = v(1) then作为新参数限制,但它不起作用。

string1 = "10,201402,10|10,201403,15|10,201404,25|10,201405,11|10,201406,23"
string2 = "10,201401,17|10,201402,25|10,201403,15|10,201404,12|10,201405,13|10,201406,9"
string3 = "12,201405,17|12,201406,25|12,201407,15|12,201408,12|12,201409,13|12,201410,9|12,201411,9|12,201412,9|12,201501,9"

Set d = CreateObject("Scripting.Dictionary")

Sub Add(s)
  For Each line In Split(s, "|")
    v = Split(line, ",")
    if v(0) = v(1) then
       d(v(1)) = d(v(1)) + CInt(v(2))
    end if
  Next
End Sub

Add string1
Add string2
Add string3

Set a = CreateObject("System.Collections.ArrayList")
For Each key In d.Keys
  a.Add d(key) & "," & key & "," & d(key)
Next
a.Sort
result = Join(a.ToArray, "|")

WScript.Echo result

实际结果:

,10,|,12,|10,201402,10|11,201405,11|12,201408,12|13,201409,13|15,201403,15|15,201407,15|17,201401,17|23,201406,23|25,201404,25|9,201410,9|9,201411,9|9,201412,9|9,201501,9​

期望的结果:

10,201401,17|10,201402,35|10,201403,30|10,201404,37|10,201405,24|10,201406,32

1 个答案:

答案 0 :(得分:1)

如果您确实使用了条件v(0) = v(1),我会严重怀疑您是否有任何结果,因为根据您的示例数据,这些值永远不会相等。

如果要对按两个参数分组的值求和,则需要从这两个参数构建字典键:

For Each line In Split(s, "|")
  v = Split(line, ",")
  key = v(0) & "," & v(1)
  d(key) = d(key) + CInt(v(2))
Next

v = Split(line, ",")将记录10,201402,10拆分为包含3个值1020140210的数组。

key = v(0) & "," & v(1)从该数组的前2个元素构建键10,2014

d(key) = d(key) + CInt(v(2))将第三个值转换为整数,并将其添加到与键10,2014关联的当前值。