Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

jueves, 24 de marzo de 2011

VB6: Rutina para Eliminar FIlas Repetidas en un Hierarchical FlexGrid

Esta rutina está pensada para un Hierarchical FlexGrid cuya primera fila (la que tiene el índice 0) contiene los nombres de las columnas, por ello procesa a partir de la fila con índice 1:

Sub eliminar_Repetidos()
Dim estaFila, unaFila As String
Dim i, j, m, n As Integer

estaFila = vbNullString
unaFila = vbNullString

With HierarchicalFlexGrid
    m = 1 ' Apunta a la primera Fila
    n = .Rows - 1 ' Cantidad de filas del HierarchicalFlexGrid
   
    Do Until m > n
        estaFila = vbNullString  'cadena con la Fila Actual
       
        For i = 0 To .Cols - 1
            estaFila = estaFila + .TextMatrix(m, i) ' Relleno la cadena con los datos de toda la fila
        Next
       
        j = 1
        Do Until j > n
            unaFila = vbNullString ' Fila a comparar
           
            For i = 0 To .Cols - 1
                unaFila = unaFila + .TextMatrix(j, i) ' la relleno con los datos de toda la fila
            Next
           
            If estaFila = unaFila And j <> m Then
                .RemoveItem (j) ' Si son iguales remuevo unaFila solamente
                n = n - 1 ' tamaño actual del HierarchicalFlexgrid, al remover disminuye en uno
            End If
           
            j = j + 1
        Loop
        m = m + 1
    Loop
   
    'Chequeo si la última y la penúltima fila son iguales, porque no se eliminan si lo son
    For i = 0 To .Cols - 1
        estaFila = estaFila + .TextMatrix(.Rows - 1, i)
        unaFila = unaFila + .TextMatrix(.Rows - 2, i)
    Next
   
    If unaFila = estaFila Then .RemoveItem (.Rows - 2)
End With
End Sub


La rutina hace lo siguiente: cojo la primera fila y, en un bucle, la comparo con todas las demás y voy eliminando las que son iguales a la primera fila. Al terminar paso a la segunda fila y vuelvo a comparar y eliminar si son iguales. Esto se repite hasta llegar al final del Hierarchical FlexGrid.
Este algoritmo es más eficiente que, en dos bucles anidados, marcar las filas repetidas para eliminarlas después.

1 comentario:

Leonel dijo...

Excelente Rutina, funciona a la perfección

Saludos