Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Problema para reconocer palabras tildadas

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mar May 20, 2008 7:57 pm
Amarië
Perlero Nuevo
Perlero Nuevo
Registrado: 20 May 2008
Mensajes: 3
Problema para reconocer palabras tildadas Responder citando

¡Hola a todos! Soy nueva con el uso de Perl y he despertado mi interés en él, pues he leído que es muy bueno en cuanto al manejo de expresiones regulares, así que acá estoy... Wink

Me di a la tarea de empezar a desarrollar mi primer programa, del cual requiero que de un documento (Extracto.txt) me tome todas las líneas que contengan una determinada palabra y las escriba en otro archivo: Datos.txt (esto lo logré), sin embargo, si la palabra buscada posee tilde no la reconoce Rolling Eyes
Asumiendo que reconociera todas las líneas que necesito aún me faltaría reemplazar algunas de las palabras buscadas por otras... según leí eso se logra mediante: s/lo_que_tengo/lo_que_quiero/g; pero me queda la duda de dónde debo colocar esa línea en el código para que el cambio se aplique en el documento nuevo (Datos.txt).

Adjunto unas líneas del mi código para que se hagan una idea de cómo voy:
Perl:
#!/usr/bin/perl

open (Datos, ">Datos.txt");       #Archivo destino de líneas buscadas.
open (FILE,"Extracto.txt") || die "no se puede abrir el archivo\n"; {    #Archivo del que deseo extraer las líneas
     while (<FILE>) {
                print Datos $_ if /Minería/;     #no la reconoce
                print Datos $_ if /Botánica/;    #no la reconoce
                print Datos $_ if /Pesca/;       #sí la reconoce
     }
}
close (FILE);


Agradezco cualquier ayuda o sugerencia ya que llevo varios días tratando de solucionar el problema y no he dado con la respuesta adecuada.

¡Saludos!
Mensaje Mie May 21, 2008 1:28 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Bienvenida a los foros de Perl en Español, Amarië.

Muy posiblemente los caracteres acentuados que estás usando en tu código Perl no son los mismos que los que están en los ficheros. Me refiero a la codificación.

Si en lugar de /Minería/ pones /Miner.a/ 'casi' seguro que lo cazas, pero es un poco chapucero.

En este foro se ha hablado en algunas ocasiones sobre este tema de los acentos. Lo normal es usar un 'use locale' para que Perl use la codificación del sistema en que te encuentres.
Mensaje Mie May 21, 2008 8:11 am
Amarië
Perlero Nuevo
Perlero Nuevo
Registrado: 20 May 2008
Mensajes: 3
Responder citando

explorer escribió:

Si en lugar de /Minería/ pones /Miner.a/ 'casi' seguro que lo cazas, pero es un poco chapucero.


¡Muchas gracias! por la bienvenida y por la pronta respuesta, Wink sin embargo, ya había intentado lo que me dices y el resultado sigue siendo el mismo, por ejemplo: si habro el documento del que deseo extraer las líneas y busco las palabras "minería" y “pesca” las puedo localizar y se ven asi:
Cita:
["Minería"] = "375:375",
["Pesca"] = "115:150",

Pero a la hora de intentar extraerla con el programa es como si no existiera... (aun poniendo /miner.a/ y haciendo uso del "use locale" al inicio del programa) solo me extrae:
Cita:
["Pesca"] = "115:150",

Esto es solo un ejemplo, en realidad quiero estraer cientos de líneas, y no he tenido problema alguno siempre y cuando no posean tilde.
Gracias de antemano, y agradezco cualquier otra sugerencia. Embarassed
Mensaje Mie May 21, 2008 9:59 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Es la codificación, seguro. Es muy posible que el fichero de entrada esté codificado de forma distinta que los acentos que has escrito en el código Perl.

Un ejemplo. Si tenemos este fichero
Código:
["Botánica"] = "375:375",
["Minería"] = "375:375",
["Pesca"] = "115:150",
en formato iso-8859-15, entonces el programa
Perl:
open (FILE,"<kk.txt") || die "no se puede abrir el archivo\n";
{
    while (<FILE>) {
        print if /Minería/;     #no la reconoce
        print if /Botánica/;    #no la reconoce
        print if /Pesca/;       #sí la reconoce
    }
}
guardado en codificación utf8, solo sacara la línea de Pesca. O al revés.

Funcionaría si el programa se guardara con la misma codificación, sea iso-8859-15, utf8 o la que sea.

Una forma también de arreglarlo es la siguiente: si el anterior programa está escrito en utf8, lo recomendable es poner justamente 'use utf8;' al principio del programa.

Otra cosa que podemos también hacer es ajustar e indicar las codificaciones que vamos a usar en la entrada y salida de datos:
Perl:
use open IN => ':utf8', OUT => ':encoding(ISO-8859-15)';

Esta línea indica que la entrada está en formato utf8, mientras que la salida va a ser en otra codificación. Con esto, podemos transformar los caracteres de una codificación a otra, mientras en el código nos olvidamos de tratar con bytes, y solo pensamos en caracteres.

Recuerda que Perl, por defecto, piensa que la entrada de datos y el programa están escrito en codificación iso-8859-1.
Mensaje Mie May 21, 2008 11:09 am
Amarië
Perlero Nuevo
Perlero Nuevo
Registrado: 20 May 2008
Mensajes: 3
Responder citando

Perl:
use open IN => ':utf8', OUT => ':encoding(ISO-8859-15)';


Very Happy ¡De hecho, esta línea solucionó todos mis problemas!

¡Muchísimas gracias! Wink
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group