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:
Un saludo.
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 (vb) [Seleccionar]
Private sub Buscar(s1 as string,busca as string)
If Form1.CheckExacto.Value = 1 Then 'Exacto
If s1 = busca Then
'lo ha conseguido
Exit Sub
Else
Exit Sub
End If
End If
If Form1.CheckCase.Value = 0 Then 'No Case sensitive
Test = Igual(s1, busca, False)
If Test Then
'lo ha conseguido
Else:
Exit Sub
End If
Exit Sub
Else 'Case sensitive
Test = Igual(s1, busca, True)
If Test Then
'lo ha conseguido
Else:
Exit Sub
End If
Exit Sub
End If
Public Function Igual(st As String, buscar As String, Sen As Boolean) As Boolean
Dim i As Integer, s As String, L As Integer, s1 As String, c As Byte, letra As Byte
s = Trim(st)
L = Len(buscar)
letra = Asc(Left(buscar, 1))
Igual = False
For i = 1 To Len(s)
c = Asc(Mid(s, i, 1))
s1 = Mid(s, i, L)
If Compara(s1, buscar, Sen) Then
Igual = True
Exit For
End If
Next
End Function
Public Function Compara(dato As String, Busca As String, Sen As Boolean) As Boolean
Dim i As Integer, c As Byte, n As Integer, b As Byte
n = 0
For i = 1 To Len(Busca)
c = Asc(Mid(dato, i, 1))
b = Asc(Mid(Busca, i, 1))
If Sen Then
If c = b Then
n = n + 1
End If
Else
If (c Or &H20) = b Or c = b Or (c Xor &H20) = b Then
n = n + 1
End If
End If
Next
If n = Len(Busca) Then
Compara = True
End If
End Function
Un saludo.