• Publicidad

Problema con la codificación de ficheros

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

Problema con la codificación de ficheros

Notapor ddiana » 2010-02-08 15:22 @682

Hola, mi problema es que tengo que obtener cierta información de archivos con extensión txt. Pensé que era algo muy sencillo ya que con expresiones regulares podría hacerlo. Sin embargo, probé con expresiones regulares distintas que según yo estaban bien y ninguna funcionó. Entonces se me ocurrió cambiar la codificación del archivo de Unicode a ANSI y funcionó muy bien. Lo que me gustaría saber es ¿por qué con el documento txt con codificación unicode no funcionan las expresiones regulares? y ¿cómo le puedo hacer para que funcionen? ¡Muchas gracias, espero que alguien pueda ayudarme!
ddiana
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-02-08 13:26 @601

Publicidad

Re: Problema con la codificación de ficheros

Notapor explorer » 2010-02-08 17:29 @770

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

Sería interesante saber en qué sistema operativo estás y, si fuera posible, un ejemplo del fichero de entrada y el código que has probado y no funciona.

Hay que tener en cuenta:
* En qué codificación está el fichero de entrada
* En qué codificación está escrito el programa
* En qué codificación va a funcionar el programa
* En qué codificación van a salir los resultados.

Por defecto, Perl siempre trabaja en ISO-8859-1 (latin1). Eso quiere decir que espera que toda entrada está en esa codificación. Y por defecto, la salida también será así.

También por defecto, Perl piensa que el código del programa está también en ISO-8859-1. Si, en cambio, usas otra codificación, pues deberás indicarlo al principio.

Una solución básica para simplificar este problema es trabajar en un sistema operativo que maneje ficheros y sistemas de ficheros siempre de la misma manera. Por ejemplo, en los Linux más modernos, toda la codificación es utf8 desde hace ya unos años, por lo que no hay problemas a la hora de intercambiar documentos con otros países.

Pues eso, que nos digas las respuestas a esas 4 preguntas anteriores, y nos enseñas algo de código, y te echamos una mano.

En el hilo anterior (Nombres de ficheros con caracteres latinos en Windows) hemos dado unos cuantos ejemplos de cambio de codificación en ese sistema operativo.

Más información en perllocale.
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: Problema con la codificación de ficheros

Notapor ddiana » 2010-02-08 18:04 @794

Muchas gracias. Bueno, estoy trabajando con Windows XP. Un pedazo del fichero de entrada es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
ABKNAME001=ACCESO GUARDIOLA
ABKNUMBER001=2389
ABKTYPE001=0
ABKNAME002=Alberto Mendez
ABKNUMBER002=3281
ABKTYPE002=1
ABKNAME003=Alvaro Rojas M
ABKNUMBER003=3346
ABKTYPE003=1
LOGTDFORMAT=132
Redial=1
Edit Dialing=1
Go to Phone Screen on Calling=1
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


El código que he probado ha sido:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open( FILE,'D:\Documents and Settings\data.txt' ) || die "\a\tERROR EN LA APERTURA DEL ARCHIVO O LA RUTA DEL MISMO ES INCORRECTA @ARGV[1]. \n\n";
while(<FILE>)
     {
      if($_=~ /^ABK.*/)
        {
         print "$_";
        }          
     }      
close(FILE);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


El fichero de entrada (de los datos) tiene codificación Unicode y el de salida deberá tener la misma. El fichero que contiene el programa tiene codificación ANSI. No sé en qué codificación va a funcionar el programa aunque supongo que depende de las características de la computadora en la que se va a ejecutar el script. Lo que necesito hacer es tomar todas las líneas que empiezan con ABK y copiarlas a otro archivo con distinto formato. Espero haber respondido a todas las preguntas y que pueda ayudarme. ¡Gracias!
ddiana
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-02-08 13:26 @601

Re: Problema con la codificación de ficheros

Notapor explorer » 2010-02-08 19:10 @840

Bien, debes indicar que el fichero que vas a leer está en codificación unicode, que en Windows es UCS-2LE. Y si quieres mandarlo a otro fichero en esa codificación, pues lo mismo:

(no probado)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use open IO => ':encoding(UCS-2LE)';

open(FILE,  '<D:/Documents and Settings/data.txt')   or die "ERROR: No puedo leer: $!\n";
open(SALIDA,'>D:/Documents and Settings/salida.txt') or die "ERROR: No puedo escribir: $!\n";

while(<FILE>) {
    if (/^ABK/) {
        print SALIDA $_;
    }
}      

close(FILE);
close(SALIDA);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo tenías resuelto en el hilo Problemas al convertir UCS-2.
Última edición por explorer el 2010-02-09 13:46 @615, editado 1 vez en total
Razón: Error en el código
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: Problema con la codificación de ficheros

Notapor ddiana » 2010-02-09 13:10 @590

¡Muchas gracias! Sí, es verdad, ya estaba resuelto pero no sabía que UCS-2LE se refería a unicode.
ddiana
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-02-08 13:26 @601


Volver a Básico

¿Quién está conectado?

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

cron