• Publicidad

Condición

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

Condición

Notapor Redpunkpower » 2012-05-22 02:11 @133

Esta parte del código está hecha para hacer un análisis sintáctico de archivos xml
y cuando está correcto el código no hay problema, pero si el xml está mal me sale que el mensaje cuando el código está bien seguido del error que hay, es decir el código en sí me funciona pero ¿cómo hago para que no me muestre el mensaje de código correcto?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $parser = XML::Parser->new( ErrorContext => 2 );
  2. if ($@) {
  3.     $@ =~ s/at \/.*?$//s;
  4.     print STDERR "\nERROR en '$xml':\n$@\n";
  5. }
  6.  
  7. else {
  8.     print STDERR "El archivo esta bien formado\n";
  9. }
  10.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2012-05-22 02:17 @137, editado 1 vez en total
Razón: Formateado de código con Perltidy
Redpunkpower
Perlero nuevo
Perlero nuevo
 
Mensajes: 35
Registrado: 2012-05-08 09:37 @442

Publicidad

Re: Condición

Notapor Redpunkpower » 2012-05-22 03:25 @184

No entiendo cómo se utiliza el perltidy... Lo he ejecutado y me ha creado un archivo totalmente igual con la extensión *.pl.tdy. Y con eso ¿qué hago? Si ejecuto el *.pl.tdy mi problema sigue igual.
Redpunkpower
Perlero nuevo
Perlero nuevo
 
Mensajes: 35
Registrado: 2012-05-08 09:37 @442

Re: Condición

Notapor explorer » 2012-05-23 02:35 @149

perltidy es un programa que sirve para formatear el código Perl, nada más. Yo lo uso para darle forma al código que escribo o que la gente publica en estos foros y, por ejemplo, las llaves están mal colocadas, o los espacios en blanco están descompensados, en cada línea.

No conozco XML::Parser, pero cuenta su página de manual dice que al llamar a parser() puede generar un die() si ocurre un fallo de validación. Si ese es tu caso, lo que debes hacer es rodear la ejecución del método parser() con un eval{}, que capturará el die(), por lo que el programa no se morirá. Y después del eval{}, sí que puedes mirar el valor de $@ para ver si ha ocurrido algún 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

Re: Condición

Notapor Redpunkpower » 2012-05-23 03:35 @191

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $xml = new XML::Simple (KeyAttr=>[]);
  2.  
  3. print "Archivo a comparar: ";
  4. my      $archivo_xml = <>;
  5. chomp   $archivo_xml;
  6. exit if $archivo_xml eq 'Q';
  7.  
  8.  
  9. my $parser = XML::Parser->new( ErrorContext => 2 );
  10.     eval { $parser->parsefile( $xml ); };
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


He puesto el eval pero me da error en la línea del "eval":
ERROR en 'XML::Simple=HASH(0xbc3754)':
Couldn't open XML::Simple=HASH(0xbc3754):
Redpunkpower
Perlero nuevo
Perlero nuevo
 
Mensajes: 35
Registrado: 2012-05-08 09:37 @442

Re: Condición

Notapor explorer » 2012-05-23 04:06 @212

Claro, porque $xml no contiene el archivo XML, sino un objeto XML::Simple.

No necesitas hacer todo eso. Te sobra la línea 1 y toda referencia a XML::Simple.

Si el nombre del archivo a procesar te lo pasa el usuario en la línea 4, pues eso es lo que tienes que poner en la línea 10:
eval { $parser->parsefile( $archivo_xml ) };
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: Condición

Notapor Redpunkpower » 2012-05-23 04:47 @241

Nada, el problema sigue...
Esto es lo que me muestra:

Archivo a comparar: *.xml
El archivo está bien formado
End tag mismatch (Cabecera != OperadorId) [Ln: 1, Col: 478]


Primero me muestra el mensaje como que está bien y luego me muestra el error. Yo quiero que me muestro uno u otro, pero no los dos...
Última edición por Redpunkpower el 2012-05-23 05:08 @256, editado 2 veces en total
Redpunkpower
Perlero nuevo
Perlero nuevo
 
Mensajes: 35
Registrado: 2012-05-08 09:37 @442

Re: Condición

Notapor explorer » 2012-05-23 04:52 @244

En las líneas 12 y 13, ¿qué es $xml?

¿No será $@?
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: Condición

Notapor Redpunkpower » 2012-05-23 05:08 @255

Vale, ya está arreglado. Tanto y al final era la tontería esa. Muchas gracias.
Redpunkpower
Perlero nuevo
Perlero nuevo
 
Mensajes: 35
Registrado: 2012-05-08 09:37 @442

Re: Condición

Notapor explorer » 2012-05-23 06:34 @315

Si hubieras puesto

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use warnings;
  3. use diagnostics;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

al principio del programa, habría sido el propio Perl el que te hubiese avisado 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


Volver a Básico

¿Quién está conectado?

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