用于将两个字符串段落合并,并通过某些规则对每一行中的数值字段进行计算(如求和、平均、舍入等)。合并的结果按特定格式输出并显示在一个 GUI 窗口中。

 

SetTitleMatchMode,2
DetectHiddenWindows,on
#SingleInstance,force


a:="rb2105	多	1	0	10	6000	12000	1.5`nm2105	多	1	0	10	6000	12000	1.5`nV2109	买	1	0	10	6000	12000	1.5"
b:="ru2105	多	2	0	20	6000	12000	1.5`ny2107	多	1	0	10	6000	12000	1.5`nV2109	 买	1	0	10	6000	12000	1.5"


strmerge(a,b)  
{ ;a,b为两个需要合并的字符串段落,用tab和回车分割,返回值也是一个字符串段落,中间用哪些字段判断,计算哪些字段需要在函数中修改;和下面的一个函数list_to_str()同时使用
  list_e:=[]
  list_a:=[]
  list_b:=[]
  flag_b:=[]        ;用来记录b矩阵,发生合并后下次跳过
  str_e=
  i=0

  loop ,Parse,a,`n,`r
  {
    if (A_LoopField="")
      continue
    else
      i++
    list_a[i]:=StrSplit(A_LoopField,A_Tab)
    list_e[i]:=list_a[i]    ;list_e是保存结果的矩阵,先获取a的数据,之后a的数据就不用再合并了
    j=0
    list_b:=[]
    loop ,Parse,b,`n,`r
    {
      if (A_LoopField="" or flag_b[A_Index]=1 )
        continue
      else
        j++
      list_b[j]:=StrSplit(A_LoopField,A_Tab)
      ;进行逻辑判断			
      if (Trim(list_a[i].1)=Trim(list_b[j].1) and Trim(list_a[i].2)=Trim(list_b[j].2))
      {
        
        list_e[i].3:=list_a[i].3+list_b[j].3
        list_e[i].4:=list_a[i].4+list_b[j].4
        list_e[i].5:=list_a[i].5+list_b[j].5
        list_e[i].6:=Floor((list_a[i].6+list_b[j].6)/2)      ;增加floor函数,用来去掉除法运算获得小数点.
        list_e[i].7:=list_a[i].7+list_b[j].7
        list_e[i].8:=Floor(list_a[i].8+list_b[j].8)
        flag_b[A_Index]:=1
        list_b.RemoveAt(j)      ;合并后删除b对应的行
      }
      else
        flag_b[A_Index]:=0
    }
  }
  str_e:=list_to_str(list_e) list_to_str(list_b) 
  return str_e
}
list_to_str(e)      ;二维数组变成字符串段落
{	
  str_e=
  i=0	
  loop ,% e.Length()
  {
    i++
    j=0
    loop,% e[i].Length()
    {
      j++
      str_e:=	str_e e[i][j] "`t" 			
    }
    str_e:=str_e "`n" 
  }
  return str_e
}

gui,debugout:Add,Text,,% strmerge(a,b)
gui,debugout:Show

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。