• Publicidad

Actualizar un texto

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

Actualizar un texto

Notapor BigBear » 2010-04-22 13:09 @589

Hola a todos.

Hace tiempo quería preguntar si alguien alguna vez vio un programa que se manejara por consola y
no por ventanas, el cual imprima cierto texto; por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Tool 0.0

Hola a todos

Soy 1
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Pues lo que me interesa es que éste se actualice en la parte de "soy 1"
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Tool 0.0

Hola a todos

Soy 2
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y así, sucesivamente. Había oído que se podía hacer con syswrite(), pero no estoy seguro.
El problema es que puedo hacerlo con clear o cls pero no me gusta esa forma.

¿Alguien sabe cómo se hace?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Actualizar un texto

Notapor natxo » 2010-04-22 13:54 @620

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use strict;
use warnings;

my $clear_screen = undef ;

# check if this is linux
if ( $^O eq 'linux' ) {
   $clear_screen = `clear` ;
}
elsif ( $^O =~ /MSWin32/i ) {
    $clear_screen = `cls`;
}

for (1..100) {
    print "Tool 0.0\n\n";
    print "Hola a todos\n\n";
    print "Soy $_\n";
    sleep 2;
    print $clear_screen ;
}
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


La variable $^O mira en qué sistema operativo te hallas. Ahora no tengo un Windows a mano, así que no lo puedo comprobar. Si lo usas en Windows, haz un print $^O para ver qué te devuelve. Si es Linux, usamos el comando "clear" para limpiar la consola, si estás en Windows puedes usar "cls" para lo mismo. Una vez que tienes eso el resto es muy fácil.
saludos,
Natxo Asenjo
natxo
Perlero nuevo
Perlero nuevo
 
Mensajes: 76
Registrado: 2007-08-09 16:22 @723
Ubicación: Países Bajos

Re: Actualizar un texto

Notapor creating021 » 2010-04-22 14:31 @646

Es mejor hacerlos con Term::Screen (ANSI Escapes):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Term::Screen;
my $scr = new Term::Screen;
$scr->at(20, 20);
$scr->puts("Hola Mundo!");
sleep(3);
$scr->at(20, 20);
$scr->puts("Hola Gente!");
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Re: Actualizar un texto

Notapor natxo » 2010-04-22 15:16 @678

creating021 escribiste:Es mejor hacerlos con Term::Screen


En teoría, tienes razón; en la práctica, sobre todo sin tener el paquete en distribuciones tan comunes como RHEL/CentOS o Debian, pues es más fácil usar la llamada al sistema que andar instalando módulos de CPAN. La vida es demasiado corta para eso :)
saludos,
Natxo Asenjo
natxo
Perlero nuevo
Perlero nuevo
 
Mensajes: 76
Registrado: 2007-08-09 16:22 @723
Ubicación: Países Bajos

Re: Actualizar un texto

Notapor explorer » 2010-04-22 15:36 @691

Si estás en Windows, puedes probar el módulo Win32::Console.

Instalarlo es cuestión de unos segundos.
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: Actualizar un texto

Notapor natxo » 2010-04-22 15:58 @707

Doddy escribiste:El problema es que puedo hacerlo con clear o cls pero no me gusta esa forma.


Esto no lo había leído antes de responder antes. Sobre gustos los colores :); incluso en la faq de Perl usan este método para hacer lo que preguntas:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$ perldoc -q screen
How do I clear the screen?

       If you only have do so infrequently, use "system":

               system("clear");

       If you have to do this a lot, save the clear string so you can print it
       100 times without calling a program 100 times:

               $clear_string = `clear`;
               print $clear_string;

       If you’re planning on doing other screen manipulations, like cursor
       positions, etc, you might wish to use Term::Cap module:

               use Term::Cap;
               $terminal = Term::Cap->Tgetent( {OSPEED => 9600} );
               $clear_string = $terminal->Tputs('cl');
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
saludos,
Natxo Asenjo
natxo
Perlero nuevo
Perlero nuevo
 
Mensajes: 76
Registrado: 2007-08-09 16:22 @723
Ubicación: Países Bajos

Re: Actualizar un texto

Notapor explorer » 2010-04-22 16:13 @717

nacho, a lo que se refiere Doddy es a cómo posicionar el cursor de la consola, en una determinada posición. Y que el método de borrar toda la pantalla no le parecía correcta o elegante. Por eso, entre creating021 y yo les hemos dado un par de alternativas, para colocar el cursor, usando las limitadas características de terminal de las consolas de Windows.
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 22 invitados