jinefo 发表于 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

Qokelate 发表于 2013-2-9 08:42:49

排版一下啦   看着累

jinefo 发表于 2013-2-9 10:03:38

条件成立:   比如第5列 中有两个 的 S000008954, 然后则判断 第 8 列中的值(128或 -128)两个相加是否等于0也是上面 128 + -128这个为零就删除两行。

shqf 发表于 2013-2-9 10:19:25

第5 列为S000008956的有5行,准备怎么办呢?

jinefo 发表于 2013-2-9 10:28:15

回复 4# shqf


    这里我都有点晕,不管第5列中有多少行, 那么第8列都能两行的去比较在删除,应该是逐行比较好点。

Qokelate 发表于 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
        $aCol = StringSplit($aLine[$a], ' ', 1)
       
        $sVarName = $sFlag & $aCol & '_' & $aCol
        Assign($sVarName, 1, 2)
        ConsoleWrite('var=' & $sVarName & @CRLF)
Next

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

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

ClipPut($sOut_Text)
Exit

runsnake 发表于 2013-2-9 11:30:36

回复 6# Qokelate


    万一文本中有关于第五列和第八列的重复行怎么办?
如有下面三行,其中第一行和第二行中的第五列和第八列完全相同(而其第6列不同):
    1       2             3          4            5                      6         78      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
因为搜到你写了跟我问的相关问题
当然更希望能回答我在一楼提的两个问题

Qokelate 发表于 2013-2-9 11:42:25

回复 7# runsnake


    根据LZ要求,是要第五列相同并且第八列相加等0才筛选,   其它既是未提到的要求,自然不进行处理

runsnake 发表于 2013-2-9 12:05:34

回复runsnake


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


    你没明白我的意思
我上面给的文本中,第1、3行满足楼主提的两个条件,但第2,3行同样满足这两个条件。这时你是怎么删呢?

kevinch 发表于 2013-2-9 13:01:25

这类问题在excel里比较好处理

fhqbbfcu2050 发表于 2013-2-13 00:42:25

楼上正解,写入EXCEL后对比

henry10423 发表于 2013-2-13 12:16:34

我晕我晕了 这个肯定要高手出手相救了

jinefo 发表于 2013-2-13 13:02:17

回复 10# kevinch


    大哥,有相关列子吗?过年了,论坛冷清

netegg 发表于 2013-2-14 12:52:44

分类汇总?

kevinch 发表于 2013-2-14 13:36:58

这个试下

页: [1] 2
查看完整版本: 匹配比较数据后删除[已解决]