• Publicidad

Error en ejecucion de script

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

Error en ejecucion de script

Notapor alden8 » 2011-04-01 11:04 @502

Hola,

Es la primera vez que publico un tema, aunque he utilizado el foro para resolver dudas anteriormente.

El script consiste en leer un xml que está formado por conjunto de elementos y éstos los voy agrupando al lugar correspondiente. Esto en un bucle, para 1265 xml. Es la idea general del script.
Donde estoy realizando el proyecto han cambiado de servidor, anteriormente funcionaba bien. Pero ahora me da el siguiente error:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Unable to recognise encoding of this document at /usr/lib/perl5/site_perl/5.8.8/XML/SAX/PurePerl/EncodingDetect.pm line 100.
Document requires an element [Ln: 1, Col: 0]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


No sucede en el mismo archivo, y luego realizo la ejecución solo para los archivos de alrededor donde se ha parado y en el archivo en cuestión donde aparece el error descrito. Y funciona correctamente.

Gracias de antemano alguna persona que me pueda ayudar.
alden8
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-03-15 14:57 @664

Publicidad

Re: Error en ejecucion de script

Notapor explorer » 2011-04-01 11:20 @513

Bienvenido a los foros de Perl en español, alden8.

El mensaje de error está indicando que el fichero no es detectado por la módulo XML::SAX::PurePerl::EncodingDetect.

Si miras su código, está intentando averiguar el tipo de fichero mirando su interior (sobre todo, los primeros bytes).

Es muy posible que el xml que estás intentando procesar no está codificado en utf-8.
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: Error en ejecucion de script

Notapor alden8 » 2011-04-01 11:25 @517

El archivo en cuestión es descargado del NCBI. Por lo que me dices, sería que el xml no tiene la codificación idónea. Pero entonces no acabo de entender, porque puede leerme anteriormente archivos del mismo tipo...
alden8
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-03-15 14:57 @664

Re: Error en ejecucion de script

Notapor explorer » 2011-04-01 11:42 @529

Deberás analizar el interior del fichero.

Con herramientas de volcado hexadecimal, por ejemplo, puedes ver los primeros bytes, para ver si localizas la marca BOM típica de los ficheros utf-8. Yo utilizo el 'hexdump'.

O incluso usando una herramienta tan sencilla como 'file' en Unix/Linux te dirá qué tipo de archivo es.

Lo que puede haber ocurrido: que el fichero haya recibido una transformación al ser bajado, que haya cambiado en el origen o que el programa que lo lee haga una transformación (o que no la haga ahora y antes sí).

Si se ha actualizado la máquina, hay que pensar que lo que ha cambiado es el programa. Podría ser que haya cambiado la versión del intérprete Perl.
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: Error en ejecucion de script

Notapor alden8 » 2011-04-01 11:58 @540

Disculpa mi desconocimiento, pero no se observar la marca BOM.

Adjunto un archivo del tipo el cual recorro.

Gracias por la ayuda explorer.

27.xml.tar.gz
(78.41 KiB) 48 veces
alden8
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-03-15 14:57 @664

Re: Error en ejecucion de script

Notapor explorer » 2011-04-01 13:35 @608

En efecto, el fichero no la tiene.

Ahora bien, el fichero empieza así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
00000000  3c 3f 78 6d 6c 20 76 65  72 73 69 6f 6e 3d 22 31  |<?xml version="1|
00000010  2e 30 22 3f 3e 0a 3c 21  44 4f 43 54 59 50 45 20  |.0"?>.<!DOCTYPE |
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

y si miramos el código del módulo, hay líneas que están comentadas que sí se activarían con ese comienzo de fichero:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     elsif ($data =~ /^\x3C\x3F\x78\x6D/) {
  2.         # $reader->set_encoding('UTF-8');
  3.         return;
  4.     }
  5.     elsif ($data =~ /^\x3C\x3F\x78/) {
  6.         # $reader->set_encoding('UTF-8');
  7.         return;
  8.     }
  9.     elsif ($data =~ /^\x3C\x3F/) {
  10.         # $reader->set_encoding('UTF-8');
  11.         return;
  12.     }
  13.     elsif ($data =~ /^\x3C/) {
  14.         # $reader->set_encoding('UTF-8');
  15.         return;
  16.     }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Curiosamente, todos estas líneas casarían con el fichero (en concreto, el primer if()), por lo que devolvería el control al programa principal. Pero si sale error, es que el fichero que estás tratando no tiene ese comienzo.

¿Seguro que 27.xml es el fichero que falla?

Yo pondría algo en la línea 99 del módulo, para que sacara a pantalla los primeros bytes de $data, para saber por qué ha fallado la comprobación.
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: Error en ejecucion de script

Notapor alden8 » 2011-04-03 12:03 @544

Descomenté las líneas que me comentaste y no resultó, también añadí un else{} para encoding UTF-8, pero la chapuzada tampoco funcionó.

Se me ha ocurrido una cosa: ya que en las primeras líneas del archivo xml en mi caso no pone la codificación, quitar esas líneas. Porque tengo construidos archivos xml sin la codificación arriba del archivo y funcionan correctamente, supongo que cogerá UTF-8, así de esta manera los xml que me dan error no tendrían por qué dármelo. La idea es un poco chapuza.

Pero es que sigo sin entender porque pasa en algunos archivos y a veces si pasa y otras no, es algo extraño.

Sino probaré a volver a descargar los xml, forzando la codificación a UTF-8.

En el servidor viejo, ahora me sale otro error que he visto común en Google, pero que no dan una solución al respecto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
no element found at line 1, column 0, byte 0 at /usr/lib/perl5/vendor_perl/5.8.7/x86_64-linux/XML/Parser.pm line 187
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
alden8
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-03-15 14:57 @664

Re: Error en ejecucion de script

Notapor explorer » 2011-04-03 14:49 @659

Yo no he dicho nada de descomentar líneas. Si están comentadas, es porque no son necesarias.

Tampoco dije nada de poner un else{} más, porque el fichero 27.xml que has mostrado corresponde con el primer if() indicado, por lo que no debería llegar hasta el final de todos los if() y fallar.

Lo que dije es: si un fichero, que suponemos que es un XML, llega al final, entonces, justo antes de sacar el mensaje de error, imprimir en pantalla el contenido (los primeros bytes de $data) para saber porqué no ha sido cazado por ninguno de los if() anteriores.

El mensaje de error que muestras, según lo que he encontrado en Google, es que estás intentando interpretar el contenido de un fichero que está vacío, o que, realmente, no es un XML.

Parece bastante obvia la explicación del error. El problema es si estamos completamente seguros de que estamos pasando contenido XML al parseador.

¿El fichero 27.xml que has pasado antes es el que provocó este mensaje de error?
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


Volver a Básico

¿Quién está conectado?

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