• Publicidad

Quitar acentos de una cadena de texto

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Quitar acentos de una cadena de texto

Notapor hugo11ab » 2008-05-08 21:00 @917

Que tal de nuevo requiriendo de su valiosa intervención.

¿Cómo puedo quitarle el acento a una cadena de texto? Aquí pongo un ejemplo.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $nombre = "Martín González Gómes";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Quisiera que quedara así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$nombre = "Martin Gonzalez Gomez";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Habrá alguna manera de sustituir la vocal acentuada por la vocal sin acento?
hugo11ab
Perlero nuevo
Perlero nuevo
 
Mensajes: 77
Registrado: 2006-07-22 23:24 @016

Publicidad

Notapor explorer » 2008-05-09 02:09 @131

Por fortuna, en Español tenemos pocos acentos y podemos hacer esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$nombre =~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Para cosas más complicadas, mejor usar Text::Unaccent::PurePerl.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor hugo11ab » 2008-05-09 10:02 @460

Gracias por tu pronta respuesta. La instrucción que me diste funcionó correctamente. Y de nuevo muchas gracias.
hugo11ab
Perlero nuevo
Perlero nuevo
 
Mensajes: 77
Registrado: 2006-07-22 23:24 @016

Notapor dgf » 2008-11-19 04:59 @249

Hola,

Yo tengo el mismo problema, quiero quitar los acentos. He intentado con:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$nombre =~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

pero me sustituye á por ae, é por ao, í por au, ó por au y u por au.
¿Alguien sabe por qué?

Muchas gracias
dgf
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-11-19 04:45 @239

Notapor explorer » 2008-11-19 05:44 @281

Bienvenido a los foros de Perl en Español, dgf.

Es cosa de la codificación del programa.

Por ejemplo. Yo estoy trabajando con Linux, en una terminal con codificación UTF8
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@joaquin:~> echo $LANG
es_ES.UTF-8
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Si ejecuto el programa en línea
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@joaquin:~> perl -le '$x = "Joaquín"; $x =~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/; print $x'
Joaquaun
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
me sale el error que comentas. Esto es debido a que cada carácter acentuado que vemos en la variable $x está ocupando dos bytes en el programa. Y por eso tr() hace dos conversiones.

Hay que decirle a Perl que estamos manejando caracteres con codificación utf8, porque, por defecto, Perl piensa que siempre estamos con la codificación iso-8859-1 (latin1):
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@joaquin:~> perl -le 'use utf8; $x = "Joaquín"; $x =~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/; print $x'
Joaquin
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Si, en esa misma terminal, arranco un editor de textos, y le configuro para que trabaje con otra codificación, que sea la iso-8859-1, entonces
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my $x = "Joaquín";

$x =~ tr/áéíóúüñçÁÉÍÓÚÜÑÇ/aeiouuncAEIOUUNC/;

print $x;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
genera también la salida correcta, debido a que todos los caracteres acentuados que hay dentro del programa están codificados de la misma manera y además pertenecen a la codificación predeterminada de Perl. Si estuviéramos codificando en otra distinta, deberíamos hacer conversiones con otro tipo de módulos, como por ejemplo Encode.

Debes mirar en qué codificación estás trabajando. O usar el módulo indicado antes.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor dgf » 2008-11-20 02:52 @161

Muchísimas gracias. Tenías razón, era problema de la codificación. Un saludo.
dgf
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-11-19 04:45 @239


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados