Discussion:
Cambiar Tildes o Acentos por las letras normales
(demasiado antiguo para responder)
Harold Crow
2005-08-12 20:56:59 UTC
Permalink
Ok,talvez mas de alguno vio que tenia que enviar palabras desordenadas para
que el usuario adivinara que palabra es, ahora bien, consegui un mi listado
de palabras en internet, el cual lo tengo en una BD
pero cuando hice el programilla que leyera el archivo csv y lo introdujera a
la BD, olvide que no tengo que considerar las tildes o acentos es decir asi:

ética habia que cambiarla por etica, me explico?? ahora voy a volver a
procesar las palabras pero necesito ir cambiando cada tilde o acento en las
palabras por las letras correspondientes, asi:
á=a
é=e
í=i
ó=o
ú=u

alguien tiene algo similar a esto??
the_ma3x
2005-08-12 21:06:51 UTC
Permalink
Harold,

Eso lo puedes hacer facilmente con la función Replace

Nuevo= Replace("ética","é","e")

Saludos
Harold Crow
2005-08-12 21:13:08 UTC
Permalink
ummm si he pensado en replace....
pero acordate que las palabras no las conozco, estan en un listado CSV
eso significa palabra leida, buscar si tiene tilde y cual, y luego
reemplazarla o seria asi:

nuevo=replace(varPalabra,"á","a")
nuevo=replace(varPalabra,"é","e")
nuevo=replace(varPalabra,"í","i")
nuevo=replace(varPalabra,"ó","o")
nuevo=replace(varPalabra,"ú","u")
.... bueno si verdad, creo que tenia estropeada la memoria por el script de
desordenar jajaajajj gracias por el reset max

"the_ma3x" <***@gmail.com> escribi� en el mensaje news:***@g14g2000cwa.googlegroups.com...
Harold,

Eso lo puedes hacer facilmente con la función Replace

Nuevo= Replace("ética","é","e")

Saludos
the_ma3x
2005-08-12 21:20:02 UTC
Permalink
De que hombre... para eso estamos... (para dar Reset) :D

Saludos
Eduardo Olaz
2005-08-13 18:10:47 UTC
Permalink
Otra solución es filtrar el texto con una función tipo a ésta:

Cadena = TextoSinAcentos(Cadena)

Pon en un módulo nuevo:
___________________________________________________
Option Explicit
Option Compare Binary

Public Function TextoSinAcentos(ByVal Texto As String) As String
' Esta función devuelve el texto sin acentos
' ***@olaz.net
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
___________________________________________________

Fíjate, que aunque
Option Compare Binary
es la opción por defecto, aquí la pongo de forma explícita.
Esto es para que distinga entre minúsculas y mayúsculas frente a
Option Compare Text


Saludos desde la calle Estafeta de Pamplona:

Eduardo Olaz
Microsoft [MVP] Access

eduardoALGARROBAolaz.net
Post by Harold Crow
Ok,talvez mas de alguno vio que tenia que enviar palabras desordenadas
para que el usuario adivinara que palabra es, ahora bien, consegui un mi
listado de palabras en internet, el cual lo tengo en una BD
pero cuando hice el programilla que leyera el archivo csv y lo introdujera
a la BD, olvide que no tengo que considerar las tildes o acentos es decir
ética habia que cambiarla por etica, me explico?? ahora voy a volver a
procesar las palabras pero necesito ir cambiando cada tilde o acento en
á=a
é=e
í=i
ó=o
ú=u
alguien tiene algo similar a esto??
unknown
2005-08-14 04:12:23 UTC
Permalink
Post by Eduardo Olaz
Public 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 Olaz
Dim 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 Olaz
For i = 1 To lngTexto
strCaracter = Mid(Texto, i, 1)
Select Case strCaracter
Case "Á", "À", "Â", "Ä", "Ã"
Mid(strNormalizado, i, 1) = "A"
Post by Eduardo Olaz
Case "á", "à", "â", "ä", "ã"
Mid(strNormalizado, i, 1) = "a"
...
Post by Eduardo Olaz
End Select
Next i
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!
Vinchenzo vinç
2005-08-14 05:41:04 UTC
Permalink
¡Qué brillante observación!!!. Una diferencia abismal entre los dos
algoritmos a tener muy en cuenta para el tratamiento de cadenas.
Gracias Leonardo.
--
:-) Un saludo
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
( ! ) Respuestas precedentes en Google:
http://tinyurl.com/43b3q
( i ) Temperancia en el foro:
http://www.mvp-access.com/rubenvigon/foro
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
( ! ) Lee. Decide. Firma la petición a Microsoft:
http://classicvb.org/petition/?lang=es
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unknown
2005-08-14 13:08:36 UTC
Permalink
Post by Vinchenzo vinç
¡Qué brillante observación!!!. Una diferencia abismal entre los dos
algoritmos a tener muy en cuenta para el tratamiento de cadenas.
Gracias Leonardo.
Gracias, Vinchenzo, pero el crédito en realidad es para Bruce McKinney
("Hardcore Visual Basic") quien es el autor de la observación original.

Es desafortunado que los traductores al español lo hayan llamado
"Programacion Avanzada con Visual Basic 5": el título sugiere que esa joya
de libro (lo mejor que he leido sobre VB en mi vida) estuviera
desactualizado. Pero sigue siendo un libro de lectura obligatoria para
cualquier programador en VB.

Detalles como ese, los hay a dos por página: y son varios cientos.

Salud!
Eduardo Olaz
2005-08-14 18:35:23 UTC
Permalink
Por cierto, en vez de la versión para 5.0, tengo otro libro con el título
Programación avanzada con Visual Basic 6.0

Es de un tal Francesco Balena

¿Algún comentario?

Saludos desde la calle Estafeta de Pamplona:

Eduardo Olaz
Microsoft [MVP] Access

eduardoALGARROBAolaz.net
ALGARROBA = @


"Leonardo Azpurua [mvp vb]" <l e o n a r d o (arroba) m v p s (punto) o r g>
Post by unknown
Post by Vinchenzo vinç
¡Qué brillante observación!!!. Una diferencia abismal entre los dos
algoritmos a tener muy en cuenta para el tratamiento de cadenas.
Gracias Leonardo.
Gracias, Vinchenzo, pero el crédito en realidad es para Bruce McKinney
("Hardcore Visual Basic") quien es el autor de la observación original.
Es desafortunado que los traductores al español lo hayan llamado
"Programacion Avanzada con Visual Basic 5": el título sugiere que esa joya
de libro (lo mejor que he leido sobre VB en mi vida) estuviera
desactualizado. Pero sigue siendo un libro de lectura obligatoria para
cualquier programador en VB.
Detalles como ese, los hay a dos por página: y son varios cientos.
Salud!
unknown
2005-08-14 23:10:31 UTC
Permalink
Post by Eduardo Olaz
Por cierto, en vez de la versión para 5.0, tengo otro libro con el título
Programación avanzada con Visual Basic 6.0
Es de un tal Francesco Balena
¿Algún comentario?
Hola.

No tengo el Balena sobre VB6, pero sí sobre VB.NET, que es excelente:
completo, preciso y bien explicado. Imagino que si el de VB6 se le compara
debe ser muy bueno, tambien.

Pero el de McKinney casi originó una "religión" de tan bueno que era. Igual
es una opinión muy personal, pero pocas veces en mi vida he leído unas
explicaciones tan claras y tan iluminadoras sobre un lenguaje de
programación como las de ese libro.

MS Press lo sacó de imprenta con la aparición de VB6 -McKinney estuvo en
desacuerdo con los planes de evolución de los lenguajes de MS desde ese
momento, y no escribió una versión actualizada. Pero te repito que creo que
es uno de esos libros que vale la pena leer (igual que los de Donald Knuth,
que ya tienen casi cuarenta años y siguen cargados de informacion valiosa).

Salud!
Eduardo Olaz
2005-08-15 00:56:29 UTC
Permalink
Trataré de conseguirlo

Saludos desde la calle Estafeta de Pamplona:

Eduardo Olaz
Microsoft [MVP] Access

eduardoALGARROBAolaz.net
ALGARROBA = @


"Leonardo Azpurua [mvp vb]" <l e o n a r d o (arroba) m v p s (punto) o r g>
Post by unknown
Post by Eduardo Olaz
Por cierto, en vez de la versión para 5.0, tengo otro libro con el título
Programación avanzada con Visual Basic 6.0
Es de un tal Francesco Balena
¿Algún comentario?
Hola.
completo, preciso y bien explicado. Imagino que si el de VB6 se le compara
debe ser muy bueno, tambien.
Pero el de McKinney casi originó una "religión" de tan bueno que era.
Igual es una opinión muy personal, pero pocas veces en mi vida he leído
unas explicaciones tan claras y tan iluminadoras sobre un lenguaje de
programación como las de ese libro.
MS Press lo sacó de imprenta con la aparición de VB6 -McKinney estuvo en
desacuerdo con los planes de evolución de los lenguajes de MS desde ese
momento, y no escribió una versión actualizada. Pero te repito que creo
que es uno de esos libros que vale la pena leer (igual que los de Donald
Knuth, que ya tienen casi cuarenta años y siguen cargados de informacion
valiosa).
Salud!
unknown
2005-08-15 04:30:34 UTC
Permalink
Post by Eduardo Olaz
Trataré de conseguirlo
A falta de la edición en español (que además es una traducción impecable),
la versión original en inglés está disponible en línea:
http://vb.mvps.org/hardcore.

Salud!
Eduardo Olaz
2005-08-15 10:05:20 UTC
Permalink
Gracias de nuevo


Saludos desde la calle Estafeta de Pamplona:

Eduardo Olaz
Microsoft [MVP] Access

eduardoALGARROBAolaz.net
ALGARROBA = @

"Leonardo Azpurua [mvp vb]" <l e o n a r d o (arroba) m v p s (punto) o r g>
Post by unknown
Post by Eduardo Olaz
Trataré de conseguirlo
A falta de la edición en español (que además es una traducción impecable),
http://vb.mvps.org/hardcore.
Salud!
SoftJaén
2005-08-15 11:29:42 UTC
Permalink
Post by unknown
completo, preciso y bien explicado. Imagino que si el de VB6 se le compara
debe ser muy bueno, tambien.
Leonardo, si te refieres al libro «Programación avanzada con Microsoft
Visual Basic .NET» de Francesco Balena, te comento que en el CD que acompaña
al libro, se encuentra la versión en inglés en formato PDF del libro
«Programación avanzada con Microsoft Visual Basic 6.0».

Y en cuanto al libro sobre VB .NET de Francesco Balena, suscribo totalmente
el comentario que has efectuado: es un "tocho" de libro, pero
imprescindible, al menos para mí. ;-)

Un saludo
--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Vinchenzo vinç
2005-08-15 17:38:19 UTC
Permalink
"Leonardo Azpurua [mvp vb]" <l e o n a r d o (arroba) m v p s (punto) o r g>
Post by unknown
el crédito en realidad es para Bruce McKinney
Pues, ¡gracias Bruce!! :-D
Pero no me retracto del todo, gracias a tí por comentarlo en este caso.
--
:-) Un saludo
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
( ! ) Respuestas precedentes en Google:
http://tinyurl.com/43b3q
( i ) Temperancia en el foro:
http://www.mvp-access.com/rubenvigon/foro
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
( ! ) Lee. Decide. Firma la petición a Microsoft:
http://classicvb.org/petition/?lang=es
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Eduardo Olaz
2005-08-14 18:32:07 UTC
Permalink
Gracias Leonardo.
Tomo muy buena nota


Saludos desde la calle Estafeta de Pamplona:

Eduardo Olaz
Microsoft [MVP] Access

***@olaz.net



"Leonardo Azpurua [mvp vb]" <l e o n a r d o (arroba) m v p s (punto) o r g>
Post by unknown
Post by Eduardo Olaz
Public 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
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 Olaz
Dim 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 Olaz
For i = 1 To lngTexto
strCaracter = Mid(Texto, i, 1)
Select Case strCaracter
Case "Á", "À", "Â", "Ä", "Ã"
Mid(strNormalizado, i, 1) = "A"
Post by Eduardo Olaz
Case "á", "à", "â", "ä", "ã"
Mid(strNormalizado, i, 1) = "a"
...
Post by Eduardo Olaz
End Select
Next i
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!
Continúe leyendo en narkive:
Loading...