• Publicidad

Reemplazar caracteres acentuados en archivo

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Reemplazar caracteres acentuados en archivo

Notapor pafnuty » 2009-10-16 09:07 @421

Hola:

Tengo el siguiente problema:
Quiero sustituir las vocales acentuadas de un archivo por otros valores, pero hasta ahora no me ha funcionado.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use utf8;
  3.  
  4. %accents = ( á => "á",
  5.              é => "é",
  6.              ó => "ó",
  7.              ú => "ú",
  8.              );
  9.  
  10.   $^I = '.bak';
  11.    while(<>){
  12.        s/([áéíóú])/$accents{$1}/eg;
  13.        print;
  14.   }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Saludos,
pafnuty
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2009-10-16 09:01 @417

Publicidad

Re: Reemplazar caracteres acentuados en archivo

Notapor explorer » 2009-10-16 09:42 @445

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

Una pregunta antes... ¿por qué quieres hacer eso?

Actualización: sospecho que lo que quieres es cambiar los caracteres acentuados por entidades HTML.

Aquí hay una manera:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. #use utf8;
  7. use encoding 'utf8';
  8. use open ':utf8';
  9.  
  10. my %a = (
  11.    'á' => '&#225;',
  12.    'é' => '&#233;',
  13.    'í' => '&#237;',
  14.    'ó' => '&#243;',
  15.    'ú' => '&#250;',
  16. );
  17.  
  18. #$^I = '.bak';
  19. while(<>){
  20.     s/([áéíóú])/$a{$1}/eg;
  21.     print ;
  22. }
  23.  
  24. __END__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


En vez de usar "use utf8;", ponemos "use encoding 'utf8';" que es casi lo mismo, y porque "use utf8;" no es necesario desde el Perl 5.8.0 (aunque sí que es cierto que hay algunas diferencias entre las dos opciones).

Luego, con el "use open" indicamos que tanto la entrada como la salida la queremos también hacer en codificación utf8 (estamos suponiendo que la entrada está en esa codificación, que vamos a modificar algunas entidades, pero que el resto lo dejaremos tal cual estaba).

El resto del programa es igual al que tenías.

De todas maneras, si lo que estás haciendo es tratar de filtrar una página HTML que contiene caracteres codificados en utf8, te vale con incluir una cabecera del tipo

Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


en el head de la página, de la misma manera que esta misma página HTML que estás viendo (mira su código).

Así no tendrás que hacer conversión ninguna.
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

Re: Reemplazar caracteres acentuados en archivo

Notapor pafnuty » 2009-10-17 12:59 @582

Quería hacer eso porque tengo que correr una herramienta de documentación que no reconoce los caracteres acentuados y no quería que en el código del programa se viera "&%--".

Muchísimas gracias por tu ayuda explorer.
pafnuty
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2009-10-16 09:01 @417

Re: Reemplazar caracteres acentuados en archivo

Notapor explorer » 2009-10-17 19:27 @852

En ese caso yo usaría Encode o el pragma open, indicando la codificación de entrada y la codificación de salida. Y el programa lo único que haría sería pasar de una codificación a otra. Nada de filtros (bueno, lo haría Perl por nosotros).
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


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 24 invitados

cron