Mar May 20, 2008 7:57 pm
|
 |
Amarië
Perlero Nuevo

|
Registrado: 20 May 2008
Mensajes: 3
|
|
| Problema para reconocer palabras tildadas |
|
|
¡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...
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
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! |
|
|
|

Mie May 21, 2008 1:28 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Mie May 21, 2008 8:11 am
|
 |
Amarië
Perlero Nuevo

|
Registrado: 20 May 2008
Mensajes: 3
|
|
|
|
|
| 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, 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.  |
|

Mie May 21, 2008 9:59 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Powered by phpBB © 2001, 2005 phpBB Group
|