• Publicidad

Cómo crear una barra de progreso en consola

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

Cómo crear una barra de progreso en consola

Notapor alvgutierr » 2007-10-02 09:38 @443

Estimados usuarios.

Me gustaría saber cómo puedo crear una barra de progreso, para ver el estado de avance de una rutina... por ejemplo un ciclo for que dura dos horas...

Sería algo así:
Código: Seleccionar todo
|#####.................................................|30%

O como la barra que utiliza cpan
Código: Seleccionar todo
................................................................................Done


¡¡¡Me sería de mucha utilidad si me pueden ayudar!!!

:arrow:
Avatar de Usuario
alvgutierr
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2007-07-06 09:09 @422

Publicidad

Notapor explorer » 2007-10-02 10:08 @463

Yo uso Smart::Comments.

En una sola línea ya tienes hecha la barra de progreso.

Ahora bien... hay que tener cuidado cuando el número de elementos del bucle se consigue de forma indirecta (por ejemplo, los registros de una consulta a una base de datos) en un bucle foreach.
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

Notapor alvgutierr » 2007-10-02 11:45 @531

Muy amable Explorer por atender mi consulta!
pruebo Smart::Comments.
Y te comento..

Gracias.... :lol: :lol: :lol:
Avatar de Usuario
alvgutierr
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2007-07-06 09:09 @422

Notapor alvgutierr » 2007-10-02 13:18 @596

Estimado Explorer: al ejecutar mi script con use Smart::Comments; me aparece en pantalla lo siguiente:
Código: Seleccionar todo
### : ###   $VAR1 = [
### : ###   $VAR1 = [
### : ###   $VAR1 = [
### : ###   $VAR1 = [
### : ###   $VAR1 = [
### : ###   $VAR1 = [
### : ###   $VAR1 = [
### : ###   $VAR1 = [
### : ###   $VAR1 = [
### : ###   $VAR1 = [

¿No entiendo el porqué...? Mi código es el siguiente
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach my $cc (sort keys (%hash_entry_id)){### Evaluating [===|    ] % done
    my @array_ldif=split(/\n+/,$hash_entry_id{$cc});
    inserta_en_usuario( $con,@array_ldif );
    inserta_en_usuarios_categorias_usuario($con, @array_ldif );
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
alvgutierr
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2007-07-06 09:09 @422

Notapor explorer » 2007-10-02 13:50 @618

Pues que raro...

Acabo de probar tu ejemplo y a mí sí que me funciona... He probado con un hash de 10.000 claves y con un tiempo de espera dentro del bucle de 2 segundos, y sí que me sale la barra de progreso y se va actualizando...
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

Notapor alvgutierr » 2007-10-02 13:55 @621

Si la barra de progreso me sale... lo que no entiendo es porque me aparecen ### : ### $VAR1 = al inicio del script... pensé que podía ser algún comentario pero los he borrado todos...
Avatar de Usuario
alvgutierr
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2007-07-06 09:09 @422

Notapor explorer » 2007-10-02 14:23 @641

Por la forma, y según el manual, es la manera en que Smart::Comments muestra una expresión, a raíz de encontrar un línea con algo así:

Código: Seleccionar todo
### : <una variable escalar>
Vamos... digo yo... pero si dices que has quitado todos los comentarios, pues entonces no sé a qué será debido...

Sería interesante ver el resultado de la ejecución, paso a paso, con el depurador, para ver realmente qué pasa.
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

Notapor alvgutierr » 2007-10-02 14:59 @666

Logré corregir el error, el script que ejecuta el programa contiene
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use Handler::parserCourier;
use Handler::parserldif;
use Handler::parserPortal;
use lib::utils;
use lib::conx;
use Switch;
use strict;
use warnings;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Uno de los archivos contenía varias líneas de esta forma
Código: Seleccionar todo
##########################################

la eliminé y se solucionó, listo...

Ahora...

Sobre la misma, cuando ejecuto el script me aparece:

Código: Seleccionar todo
    (W uninitialized) An undefined value was used as if it were already
    defined.  It was interpreted as a "" or a 0, but maybe it was a mistake.
    To suppress this warning assign a defined value to your variables.

    To help you figure out what was undefined, perl tells you what operation
    you used the undefined value in.  Note, however, that perl optimizes your
    program and the operation displayed in the warning may not necessarily
    appear literally in your program.  For example, "that $foo" is
    usually optimized into "that " . $foo, and the warning will refer to
    the concatenation (.) operator, even though there is no . in your
    program.             


Pero no logro saber cuál es el problema.
Avatar de Usuario
alvgutierr
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2007-07-06 09:09 @422

Notapor explorer » 2007-10-02 15:28 @686

Para resolver el tema de los comentarios, valdría con definir en el use cómo son los comentarios que interesan:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Smart::Comments '###';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y para lo segundo, el aviso quiere decir que estás usando una variable sin antes haberla inicializado (haberle dado un valor inicial).

El aviso debería decir la línea en la que haces eso.

Esta es una de las consecuencias de usar 'use strict;'. Puede parecer molesto, pero es muy recomendable para evitar errores 'ocultos'.
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 10 invitados