elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Encontrar una cadena en una lista de cadenas con 3 opciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Encontrar una cadena en una lista de cadenas con 3 opciones  (Leído 1,734 veces)
Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Encontrar una cadena en una lista de cadenas con 3 opciones
« en: 21 Marzo 2020, 18:33 pm »

Hola a todos:

Ya se que pensareis que es una pregunta muy documentada pero...
Tengo un montón de ejemplos de código para, en teoría, hacer esto, pero ninguno funciona.

Explico lo que se necesita.

Tengo por ejemplo, estos nombres de archivos en un ListBox:
Sonia
SoniA - Co(2)
sOnIa - copia
sonia
Dario_Sonia_1
PepeSoNia_2(a)
OscarMariSoniA
Imagen_1
JorjePepe_2

Y el nombre a buscar en el ListBox es "Sonia"

Y hay 3 posibilidades de coincidencias, dependiendo de el estado de 2 CheckBox

1 - nombre exacto en nº de caracteres y case sensitive en cada una de las letras
solo devolvería"Sonia"

2 - nombre que contiene mismo nº de caracteres y case sensitive en cada una de las letras
devolvería "Sonia"
devolvería "Dario_Sonia_1"

3 - nombre que contiene mismo nº de caracteres y No case sensitive en cada una de las letras
devolvería "Sonia"
devolvería "SoniA - Co(2)"
devolvería "sOnIa - copia"
devolvería "sonia"
devolvería "Dario_Sonia_1"
devolvería "PepeSoNia_2(a)"
devolvería "OscarMariSoniA"

Yo he escrito un código que funciona al 100%, pero lo publico aquí por si alguien me sugiere si hay una forma mas fácil, o más "profesional" de hacerlo.
Y no comprendo como no he sido capaz de encontrar un código que haga esto en ningún sitio, supongo que no seré el único que necesita este tipo de código.

Esto es lo que tengo:


Código
  1.  
  2. Private sub Buscar(s1 as string,busca as string)
  3.        If Form1.CheckExacto.Value = 1 Then  'Exacto
  4.            If s1 = busca Then
  5.                'lo ha conseguido
  6.                Exit Sub
  7.            Else
  8.                Exit Sub
  9.            End If
  10.        End If
  11.        If Form1.CheckCase.Value = 0 Then   'No Case sensitive
  12.                Test = Igual(s1, busca, False)
  13.                If Test Then
  14.                    'lo ha conseguido
  15.                Else:
  16.                    Exit Sub
  17.                End If
  18.                Exit Sub
  19.        Else    'Case sensitive
  20.                Test = Igual(s1, busca, True)
  21.                If Test Then
  22.                    'lo ha conseguido
  23.                Else:
  24.                    Exit Sub
  25.                End If
  26.                Exit Sub
  27.        End If
  28.  
  29. Public Function Igual(st As String, buscar As String, Sen As Boolean) As Boolean
  30.    Dim i As Integer, s As String, L As Integer, s1 As String, c As Byte, letra As Byte
  31.    s = Trim(st)
  32.    L = Len(buscar)
  33.    letra = Asc(Left(buscar, 1))
  34.    Igual = False
  35.    For i = 1 To Len(s)
  36.        c = Asc(Mid(s, i, 1))
  37.        s1 = Mid(s, i, L)
  38.        If Compara(s1, buscar, Sen) Then
  39.            Igual = True
  40.            Exit For
  41.        End If
  42.    Next
  43. End Function
  44.  
  45. Public Function Compara(dato As String, Busca As String, Sen As Boolean) As Boolean
  46.    Dim i As Integer, c As Byte, n As Integer, b As Byte
  47.    n = 0
  48.    For i = 1 To Len(Busca)
  49.        c = Asc(Mid(dato, i, 1))
  50.        b = Asc(Mid(Busca, i, 1))
  51.        If Sen Then
  52.            If c = b Then
  53.                n = n + 1
  54.            End If
  55.        Else
  56.            If (c Or &H20) = b Or c = b Or (c Xor &H20) = b Then
  57.                n = n + 1
  58.            End If
  59.        End If
  60.    Next
  61.    If n = Len(Busca) Then
  62.        Compara = True
  63.    End If
  64. End Function
  65.  
  66.  

Un saludo.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines