以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于系统命令排除重复值的扩展?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=87819)

--  作者:wh420
--  发布时间:2016/7/20 14:11:00
--  关于系统命令排除重复值的扩展?
日常工作----排序与筛选---高级---重复筛选----排除重复值,此系统命令Syscmd.Filter.HideSameValues()如何拓展一下,让他对有空格的也排重?
--  作者:大红袍
--  发布时间:2016/7/20 14:17:00
--  

 本来,对于空值的列,就有区分的功能。如果要自己做,参考

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=83243&skin=0

 


--  作者:wh420
--  发布时间:2016/7/20 14:21:00
--  
我要排重的就是单列,是对空格也有排重效果,不是空值的列。


图片点击可在新窗口打开查看此主题相关图片如下:367.jpg
图片点击可在新窗口打开查看

其实这四行都是重复的,只是有的中间有空格,有的前面有空格,有的后面有空格。


--  作者:大红袍
--  发布时间:2016/7/20 14:29:00
--  

方法一:直接把空格替换掉

 

For Each dr As DataRow In DataTables("表A").datarows
    dr("第一列") = dr("第一列").replace(" ", "")
Next


--  作者:wh420
--  发布时间:2016/7/20 14:31:00
--  
上传文件,请老师帮忙看看,点窗口中的“排重”按钮实现排重
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目33.rar



--  作者:wh420
--  发布时间:2016/7/20 14:32:00
--  
不能用替换的方法,如果是中文还好,如果是英文的,把单词之间的空格都替换掉,那排重后的英语句子都粘在一起了。
--  作者:大红袍
--  发布时间:2016/7/20 14:33:00
--  

方法二:编写代码处理筛选

 

Dim idx As String = "-1,"
Dim idx_temp As String = ""
Dim pdr As DataRow = Nothing
Dim count As Integer = 0
Dim cs As String = "第一列"
For Each dr As DataRow In DataTables("表A").Select("", cs)
    Dim flag As Boolean = False
    If pdr IsNot Nothing Then
        For Each c As String In cs.split(",")
            If pdr(c).replace(" ","") <> dr(c).replace(" ", "") Then
                flag = True
                Exit For
            End If
        Next
        If flag Then
            If count > 1 Then
                idx &= idx_temp
            End If
            count = 1
            idx_temp = ""
        Else
            count += 1
            idx_temp &= dr("_Identify") & ","
        End If
    Else
        count += 1
    End If
    pdr = dr
Next

If count > 1 Then
    idx &= idx_temp
End If

Tables("表A").filter = "_Identify not In (" & idx.trim(",") & ")"


--  作者:wh420
--  发布时间:2016/7/20 14:39:00
--  
好使,不过代码有点看不太懂。老师能给说一下大概原理吗?
--  作者:大红袍
--  发布时间:2016/7/20 14:44:00
--  

 对表格进行排序,循环每一行,如果当前一行数据跟上一行数据不一样,就记录当前行的_Identify,最后得到的就是每种不同数据的第一行。

 

 或者这样这样理解, 对表格进行排序,循环每一行,如果当前一行数据跟上一行数据不一样,如果是第一行,就不记录,接下来的,全部记录,最后就得到全部多余重复的数据。


--  作者:wh420
--  发布时间:2016/7/20 15:02:00
--  
明白了。多谢老师。