找回密码
 加入
搜索
查看: 8379|回复: 21

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

 火.. [复制链接]
发表于 2013-2-9 03:29:34 | 显示全部楼层 |阅读模式
本帖最后由 jinefo 于 2013-2-26 07:43 编辑

求大侠给点思路,想不到什么好的方法处理。问题如下, 只要是第五列是相同的,并且第八列相同等于零,就把它们移除~~先判断第5列相同,然后就判断第8列的数值 一样 如 128+ -128这样,等于0,则删除这两行。


FSZHB1        04        2012-11-22        1348        S000008953        BC14D02100                0        3992        0        0        0        3992
FSZHB1        04        2012-11-22        1552        S000008954        BC14D01599                0        128        0        0        0        128
FSZHB1        04        2012-11-22        1552        S000008954        BC14D99999                0        -128        0        0        0        -128
FSZHB1        04        2012-11-22        1554        S000008955        BC14D99999                0        -1280        0        0        0        -1280
FSZHB1        04        2012-11-22        1554        S000008955        BC14D02097                0        1280        0        0        0        1280
FSZHB1        04        2012-11-22        1907        S000008956        BC14D02087                0        3690        0        0        0        3690
FSZHB1        04        2012-11-22        1907        S000008956        BC14D01796                0        158        0        0        0        158
FSZHB1        04        2012-11-22        1907        S000008956        BC14D01579                0        248        0        0        0        248
FSZHB1        04        2012-11-22        1907        S000008956        BC14D99999                0        -4096        0        0        0        -.4096
FSZHB1        04        2012-11-22        1907        S000008956        BC14D99996                0        10000        0        0        0        10000
FSZHB1        04        2012-11-22        2120        S000008957        BC14D99996                0        -10000        0        0        0        -10000
FSZHB1        04        2012-11-22        2120        S000008957        BC14D99996                0        10000        0        0        0        10000
FSZHB1        04        2012-11-22        2120        S000008957        BC14D01579                0        248        0        0        0        248
FSZHB1        04        2012-11-22        2120        S000008957        BC14D99998                0        -4581        0        0        0        -4581
FSZHB1        04        2012-11-22        2120        S000008957        BC14D01796                0        158        0        0        0        158
FSZHB1        04        2012-11-22        2120        S000008957        BC14D01908                0        14175        0        0        0        14175
发表于 2013-2-9 08:42:49 | 显示全部楼层
排版一下啦   看着累
 楼主| 发表于 2013-2-9 10:03:38 | 显示全部楼层
条件成立:   比如第5列 中有两个 的 S000008954, 然后则判断 第 8 列中的值(128或 -128)  两个相加是否等于0  也是上面 128 + -128这个为零就删除两行。
发表于 2013-2-9 10:19:25 | 显示全部楼层
第5 列为S000008956的有5行,准备怎么办呢?
 楼主| 发表于 2013-2-9 10:28:15 | 显示全部楼层
回复 4# shqf


    这里我都有点晕,  不管第5列中有多少行, 那么第8列都能两行的去比较在删除,应该是逐行比较好点。
发表于 2013-2-9 10:56:51 | 显示全部楼层
回复 1# jinefo


    不会正则,原则上用正则可以很简单解决,暂扔块砖吧,谁有玉麻烦大量砸过来,再顺便祝大家新年快乐!!



Local $string = _
                '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'


$string = StringRegExpReplace($string, '\h+', ' ')

Local $aLine = StringSplit($string, @CRLF, 1)

Local $sFlag = '_____'

Local $aCol, $sOut_Text, $sVarName, $sCheckName
For $a = 1 To $aLine[0]
        $aCol = StringSplit($aLine[$a], ' ', 1)
        
        $sVarName = $sFlag & $aCol[5] & '_' & $aCol[8]
        Assign($sVarName, 1, 2)
        ConsoleWrite('var=' & $sVarName & @CRLF)
Next

For $a = 1 To $aLine[0]
        $aCol = StringSplit($aLine[$a], ' ', 1)
        
        If StringInStr($aCol[8], '-') Then
                $sCheckName = $sFlag & $aCol[5] & '_' & StringReplace($aCol[8], '-', '')
        Else
                $sCheckName = $sFlag & $aCol[5] & '_-' & $aCol[8]
        EndIf
        
        If 0 = IsDeclared($sCheckName) Then $sOut_Text &= $aLine[$a] & @CRLF
Next

$sOut_Text = StringReplace($sOut_Text, ' ', '        ')

ClipPut($sOut_Text)
Exit

发表于 2013-2-9 11:30:36 | 显示全部楼层
回复 6# Qokelate


    万一文本中有关于第五列和第八列的重复行怎么办?
如有下面三行,其中第一行和第二行中的第五列和第八列完全相同(而其第6列不同):
    1       2             3          4            5                      6         7  8      9...........
------------------------------------------文本-------------------------------------------------
FSZHB1 04 2012-11-22 1552 S000008954 BC14D01599 0 128    0 0 0 128
FSZHB1 04 2012-11-22 1552 S000008954 BC14D01600 0 128    0 0 0 128
FSZHB1 04 2012-11-22 1552 S000008954 BC14D99999 0 -128   0 0 0 -128
-------------------------------------------文本-------------------------------------------------

这时,应该怎么删?三行全删了,还是只删二,三行?

=======================================================
对了,麻烦你看看这个帖的4楼:http://www.autoitx.com/thread-37303-1-1.html
因为搜到你写了跟我问的相关问题
当然更希望能回答我在一楼提的两个问题
发表于 2013-2-9 11:42:25 | 显示全部楼层
回复 7# runsnake


    根据LZ要求,是要第五列相同并且第八列相加等0才筛选,   其它既是未提到的要求,自然不进行处理
发表于 2013-2-9 12:05:34 | 显示全部楼层
回复  runsnake


    根据LZ要求,是要第五列相同并且第八列相加等0才筛选,   其它既是未提到的要求,自 ...
Qokelate 发表于 2013-2-9 11:42



    你没明白我的意思
我上面给的文本中,第1、3行满足楼主提的两个条件,但第2,3行同样满足这两个条件。这时你是怎么删呢?
发表于 2013-2-9 13:01:25 | 显示全部楼层
这类问题在excel里比较好处理
发表于 2013-2-13 00:42:25 | 显示全部楼层
楼上正解,写入EXCEL后对比
发表于 2013-2-13 12:16:34 | 显示全部楼层
我晕我晕了 这个肯定要高手出手相救了
 楼主| 发表于 2013-2-13 13:02:17 | 显示全部楼层
回复 10# kevinch


    大哥,有相关列子吗?过年了,论坛冷清
发表于 2013-2-14 12:52:44 | 显示全部楼层
分类汇总?
发表于 2013-2-14 13:36:58 | 显示全部楼层
这个试下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-13 07:06 , Processed in 0.082945 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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