找回密码
 加入
搜索
楼主: jinefo

[效率算法] 匹配比较数据后删除[已解决]

 火.. [复制链接]
发表于 2013-2-14 15:15:10 | 显示全部楼层
像是会计类的出纳表格
发表于 2013-2-15 12:08:08 | 显示全部楼层
学习,天天学习,天天向上
 楼主| 发表于 2013-2-24 05:23:12 | 显示全部楼层
afan大哥呢,来帮帮我啊?
发表于 2013-2-24 12:59:43 | 显示全部楼层
Local $Str = _
                'FSZHB1        04        2012-11-22        1348        S000008953        BC14D02100                0        3992        0        0        0        3992' & @CRLF & _
                'FSZHB1        04        2012-11-22        1552        S000008954        BC14D01599                0        128        0        0        0        128' & @CRLF & _
                'FSZHB1        04        2012-11-22        1552        S000008954        BC14D99999                0        -128        0        0        0        -128' & @CRLF & _
                'FSZHB1        04        2012-11-22        1554        S000008955        BC14D99999                0        -1280        0        0        0        -1280' & @CRLF & _
                'FSZHB1        04        2012-11-22        1554        S000008955        BC14D02097                0        1280        0        0        0        1280' & @CRLF & _
                'FSZHB1        04        2012-11-22        1907        S000008956        BC14D02087                0        3690        0        0        0        3690' & @CRLF & _
                'FSZHB1        04        2012-11-22        1907        S000008956        BC14D01796                0        158        0        0        0        158' & @CRLF & _
                'FSZHB1        04        2012-11-22        1907        S000008956        BC14D01579                0        248        0        0        0        248' & @CRLF & _
                'FSZHB1        04        2012-11-22        1907        S000008956        BC14D99999                0        -4096        0        0        0        -.4096' & @CRLF & _
                'FSZHB1        04        2012-11-22        1907        S000008956        BC14D99996                0        10000        0        0        0        10000' & @CRLF & _
                'FSZHB1        04        2012-11-22        2120        S000008957        BC14D99996                0        -10000        0        0        0        -10000' & @CRLF & _
                'FSZHB1        04        2012-11-22        2120        S000008957        BC14D99996                0        10000        0        0        0        10000' & @CRLF & _
                'FSZHB1        04        2012-11-22        2120        S000008957        BC14D01579                0        248        0        0        0        248' & @CRLF & _
                'FSZHB1        04        2012-11-22        2120        S000008957        BC14D99998                0        -4581        0        0        0        -4581' & @CRLF & _
                'FSZHB1        04        2012-11-22        2120        S000008957        BC14D01796                0        158        0        0        0        158' & @CRLF & _
                'FSZHB1        04        2012-11-22        2120        S000008957        BC14D01908                0        14175        0        0        0        14175'

Local $sOut = $Str, $ts = TimerInIt()
Local $aDuan = StringRegExp($str, '(?mi)^.+?\h+\d{4}\h+(s\w+)\h+[\S\s]+\1\V+', 4)
If Not @Error Then
        Local $aTmp, $aTmp1, $Line, $val, $val1, $i, $ii, $iii, $aSR
        For $i = 0 To UBound($aDuan) - 1
                $aTmp = $aDuan[$i]
                $aSR = StringRegExp($aTmp[0], '(?mi)^.+?\h+\d{4}\h+s\w+\h+\w+\h+\w+\h+(\S+)\V+', 4)
                If @Error Then ContinueLoop
                For $ii = 0 To UBound($aSR) - 1
                        $aTmp1 = $aSR[$ii]
                        $Line = $aTmp1[0]
                        $val = $aTmp1[1]
                        For $iii = $ii + 1 To UBound($aSR) - 1
                                $aTmp1 = $aSR[$iii]
                                $val1 = $aTmp1[1]
                                If $val + $val1 = 0 Then
                                        $sOut = StringReplace($sOut, $Line, '')
                                        $sOut = StringReplace($sOut, $aTmp1[0], '')
                                        $ii = $iii
                                        ContinueLoop 2
                                EndIf
                        Next
                Next
        Next
        MsgBox(0, Round(TimerDiff($ts), 2) & ' ms', $Str & @LF & @LF & _
                        ' --------- 处理结果如下,未删除空行是为了对比明示 --------- ' & @LF & @LF & $sOut)
EndIf
发表于 2013-2-24 18:09:37 | 显示全部楼层
看见正则就头晕,那些不是字符的字符
发表于 2013-2-25 07:43:20 | 显示全部楼层
都是高手,学习了.
 楼主| 发表于 2013-2-26 07:44:04 | 显示全部楼层
可以达到基本要求了,谢谢楼上各位,多谢afan大哥
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-12 21:06 , Processed in 0.069367 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表