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