Post by Eduardo OlazPublic Function TextoSinAcentos(ByVal Texto As String) As String
' Esta función devuelve el texto sin acentos
Dim lngTexto As Long
Dim i As Long
Dim strCaracter As String * 1
Dim strNormalizado As String
lngTexto = Len(Texto)
If lngTexto = 0 Then
TextoSinAcentos = ""
Exit Function
End If
For i = 1 To lngTexto
strCaracter = Mid(Texto, i, 1)
Select Case strCaracter
Case "Á", "À", "Â", "Ä", "Ã"
strCaracter = "A"
Case "á", "à", "â", "ä", "ã"
strCaracter = "a"
Case "É", "È", "Ê", "Ë"
strCaracter = "E"
Case "é", "è", "ê", "ë"
strCaracter = "e"
Case "Í", "Ì", "Î", "Ï"
strCaracter = "I"
Case "í", "ì", "î", "ï"
strCaracter = "i"
Case "Ó", "Ò", "Ô", "Ö", "Õ"
strCaracter = "O"
Case "ó", "ò", "ô", "ö", "õ"
strCaracter = "o"
Case "Ú", "Ù", "Û", "Ü"
strCaracter = "U"
Case "ú", "ù", "û", "ü"
strCaracter = "u"
Case "Ý"
strCaracter = "Y"
Case "ý", "ÿ"
strCaracter = "y"
End Select
TextoSinAcentos = TextoSinAcentos & strCaracter
Next i
End Function
Hola, Eduardo:
En VB es conveniente utilizar el operación de concatenación de cadenas lo
menos posible.
Las cadenas son estructuras complejas en VB, y cada vez que ejecutas una
concatenación se crea una nueva cadena con el valor resultante. Las cadenas
originales van quedando disponibles para ser procesadas por el recolector de
basura. El resultado práctico de muchas operaciones de concatenación es un
rendimiento cada vez peor.
En este cas, se puede lograr una optimización notable, tanto en el
rendimiento de las operaciones de cadenas como en la reducción de las
Post by Eduardo OlazDim lngTexto As Long
Dim i As Long
Dim strCaracter As String * 1
Dim strNormalizado As String
lngTexto = Len(Texto)
If lngTexto = 0 Then
strNormalizado = Texto
...
Post by Eduardo OlazFor i = 1 To lngTexto
strCaracter = Mid(Texto, i, 1)
Select Case strCaracter
Case "Á", "À", "Â", "Ä", "Ã"
Mid(strNormalizado, i, 1) = "A"
Post by Eduardo OlazCase "á", "à", "â", "ä", "ã"
Mid(strNormalizado, i, 1) = "a"
...
TextoSinAcentos = strNormalizado
End Function
Fíjate que sólo ejecutas asignaciones a los caracteres que deben ser
cambiados (nunca a la cadena completa) y que no se producen cambios donde no
son necesarios.
Si comparas ambos metodos, verás que esta opción es tanto más rápida que la
otra en la medida en que las longitudes de las cadenas de entrada aumenta:
la concatenacion se deteriora exponencialmente (cada vez es mas dificil
encontrar espacio para asignar las nuevas cadenas, y llega un punto en que
el recolector está trabajando permanentemente en segundo plano), mientras
que el tiempo requerido para los metodos de reemplazo interno es linealmente
proporcional a la longitud de la cadena de entrada.
Salud!