• Publicidad

Problema para reconocer palabras tildadas

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

Problema para reconocer palabras tildadas

Notapor Amarië » 2008-05-20 20:57 @914

¡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 :roll:
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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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);
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


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!
Amarië
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-05-20 19:36 @858

Publicidad

Notapor explorer » 2008-05-21 02:28 @144

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Amarië » 2008-05-21 09:11 @424

explorer escribiste: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:
["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:
["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. :oops:
Amarië
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-05-20 19:36 @858

Notapor explorer » 2008-05-21 10:59 @499

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: Seleccionar todo
["Botánica"] = "375:375",
["Minería"] = "375:375",
["Pesca"] = "115:150",
en formato iso-8859-15, entonces el programa
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
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
    }
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use open IN => ':utf8', OUT => ':encoding(ISO-8859-15)';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Amarië » 2008-05-21 12:09 @548

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use open IN => ':utf8', OUT => ':encoding(ISO-8859-15)';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


:D ¡De hecho, esta línea solucionó todos mis problemas!

¡Muchísimas gracias! :wink:
Amarië
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-05-20 19:36 @858


Volver a Básico

¿Quién está conectado?

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

cron