用于将两个字符串段落合并,并通过某些规则对每一行中的数值字段进行计算(如求和、平均、舍入等)。合并的结果按特定格式输出并显示在一个 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
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)