Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Problema con la codificación de ficheros  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 5 mensajes ] 
 
Nota Lun Feb 08, 2010 3:22 pm

Perlero Nuevo
Registrado: Lun Feb 08, 2010 1:26 pm
Mensajes: 11
Problema con la codificación de ficheros
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!


Nota Lun Feb 08, 2010 5:29 pm
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Problema con la codificación de ficheros
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


Nota Lun Feb 08, 2010 6:04 pm

Perlero Nuevo
Registrado: Lun Feb 08, 2010 1:26 pm
Mensajes: 11
Re: Problema con la codificación de ficheros
Muchas gracias. Bueno, estoy trabajando con Windows XP. Un pedazo del fichero de entrada es:
Syntax: [ Download ] [ Hide ]
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


El código que he probado ha sido:
Syntax: [ Download ] [ Hide ]
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);


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!


Nota Lun Feb 08, 2010 7:10 pm
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Problema con la codificación de ficheros  RESUELTO
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)
Syntax: [ Download ] [ Hide ]
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);


Lo tenías resuelto en el hilo Problemas al convertir UCS-2.

_________________
JF^D Perl programming


Última edición por explorer el Mar Feb 09, 2010 1:46 pm, editado 1 vez en total
Error en el código


Nota Mar Feb 09, 2010 1:10 pm

Perlero Nuevo
Registrado: Lun Feb 08, 2010 1:26 pm
Mensajes: 11
Re: Problema con la codificación de ficheros
¡Muchas gracias! Sí, es verdad, ya estaba resuelto pero no sabía que UCS-2LE se refería a unicode.


Responder al tema  [ 5 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO