Pregunta: | 4866 - ¿ COMO HACER BUSQUEDAS EXACTAS EN CONTROL LIST ? |
Autor: | Patricio Hernandez |
Necesito sabes como poder realizar busquedas de cadenas de texto en un list con un determinado numero de item´s ???? |
Respuesta: | Gabriel Memmel |
Abajo te escribo un código muy simple que utiliza la funcion 'StrComp', Espero que te sirva, en caso de alguna duda solo comunicate conmigo
'------------------------------------------------- 'Esta es una forma muy simple de realizar busquedas muy precisas en un ListBox 'a traves de la funcion 'StrComp' 'Para este proyecto se necesita un ListBox, un TextBox, dos CommandButtons 'y dos CheckBoxes Dim Ult_Linea, Ult_Caracter, Encontrado 'Busca una palabra en un ListBox Private Function Busqueda(Texto, Ult_Lin, Ult_Car) 'Prepara el texto para buscar la cadena completa una sub cadena, segun lo seleccionado If Check2.Value = 0 Then Texto1 = Texto If Check2.Value = 1 Then Texto1 = " " + Trim$(Texto) + " " 'Inicia el ciclo de linea por linea For i1 = 0 To List1.ListCount - 1 'Verifica si ya se encontro para buscar el la ultima linea revisada If i1 < Ult_Lin Then i1 = Ult_Lin Texto2 = " " + List1.List(i1) + " " 'Inicia el ciclo de caracter por caracter For i2 = 1 To Len(Texto2) - Len(Texto1) 'Verifica si ya se encontro para buscar en el siguiente caracter If i2 < Ult_Car Then i2 = Ult_Car 'Verifica si el texto a buscar puede o no estar en esa línea If Texto2 <> "" And Len(Texto1) > 0 And Len(Texto1) <= Len(Texto2) _ Then texto3 = Mid$(Texto2, i2, Len(Texto1)) If Check1.Value = 1 Then 'Realiza la comparacion diferenciando mayusculas de minusculas If StrComp(Texto1, texto3, vbBinaryCompare) = 0 Then List1.Selected(i1) = True Ult_Linea = i1: Ult_Caracter = i2 + 1 Busqueda = True Exit Function End If End If If Check1.Value = 0 Then 'Realiza la comparacion sin diferenciar mayusculas de minusculas If StrComp(UCase$(Texto1), UCase$(texto3), vbBinaryCompare) = 0 Then List1.Selected(i1) = True Ult_Linea = i1: Ult_Caracter = i2 + 1 Busqueda = True Exit Function End If End If Next i2 'Mantiene los valores como si no se encontrase nada por si no se encuentra List1.Selected(i1) = False Ult_Linea = 0 Ult_Caracter = 0 Next i1 Busqueda = False End Function Private Sub Command1_Click() 'Realiza una busqueda desde el inicio dando los datos como 0 en el comienzo de 'linea y caracter y devuelve un valor booleano a la variable 'Encontrado' Encontrado = Busqueda(Text1, 0, 0) End Sub Private Sub Command2_Click() 'Realiza una busqueda desde la ultima palabra encontrada para ver si existen 'otras iguales y devuelve un valor booleano a la variable 'Encontrado' Encontrado = Busqueda(Text1, Ult_Linea, Ult_Caracter) End Sub |