[PERL]-Afficher au même endroit sur la page

Résolu
blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,

comment afficher (dans une console en mode texte) un compteur qui reste au même endroit à l'affichage ?

J'ai essayé avec print $a."\b", pour faire un effacement de caractère, mais je suis obligé de mettre un test pour savoir combien j'ai affiché de car et mettre le nombre de \b qui va bien.

Y aurait-il une méthode "intégrée", genre (tput), mais avec les modules standards de PERL (pas de CPAN et autres joyeusetés)...?

Merci d'avance.

--
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

9 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    comment afficher (dans une console en mode texte) un compteur qui reste au même endroit à l'affichage ?

    Je ne suis pas sur d'avoir compris ta demande. Veux-tu détailler s'il te plaît?

    lami20j
    0
  2. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Très simple :

    Dans une session telnet (en mode texte), je lance un script :

    dans ce script, j'ai un certain nombre de données à traiter :

    - je n'en connais le nombre qu'avant de rentrer dans ma boucle
    - pour chaque donnée, j'ai un traitement à faire, à base de tri, de manip de tableaux... donc une boucle assez longue

    J'aimerais donc que s'affiche un compteur qui se décrémente à chaque passage dans ma boucle. Mais je ne veux aucun saut de ligne, ni quoi que ce soit...

    J'avais mis des . à l'affichage (sans cr/lf), mais c'est pas cool, car on ne sait pas combien de temps ça dure. Je souhaite donc mettre un compteur en temps réel (sachant que je n'ai pas d'affichage dans ma boucle qui pourrait parasiter les résultats). Mais peu m'importe l'endroit où c'est affiché, du moment que ça se récrit par-dessus...

    C'est plus clair ?
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    mais je suis obligé de mettre un test pour savoir combien j'ai affiché de car et mettre le nombre de \b qui va bien

    Ce n'est pas grave pour compter les \b

    c'est ça que tu veux?
    #!/usr/bin/perl
    
    use warnings;use strict;
    
    my $c =0;
    while (1) {
     print "\b" x length($c);
     print "$c";
     $c++;
     last if $c == 100000;
    }
    print "\n"; 
    lami20j
    0
  4. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Voui, presque, sauf que si on fait un décrément, il y a toujours des chiffres affichés à droite quand on change de longueur de compteur...

    J'y tourne dans tous les sens, je n'y arrive pas : insertion de blanc après le compteur pour effacer les zéros (blancs qu'il faudra ôter...)...

    Je crois que je vais formater mon compteur sur une longueur fixe et compléter à gauche par des zéros, ça sera plus facile...

        printf("%04d", $a);
        print "\b\b\b\b";


    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    sauf que si on fait un décrément

    C'est normal puisque le \b n'efface pas les caractères, il fait seulement un retour en arrière.

    Une solution c'est comme tu dit avec l'ajoute des zéros tant que tu obtiens ce que tu veux.

    lami20j
    0
  7. blux Messages postés 5035 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Ben voui, mais depuis le début, je dis que veux décrémenter ;-)

    Merci bien de tes explications.
    0
  8. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut,

    Teste quand même si tu n'as pas le module Term::Cap, qui est présent sur toutes mes installations de Perl (même les minimales - il semble que ce module soit utilisé par le débogueur Perl). Tu as une fonction Tgoto, qui place le curseur à l'écran sur des coordonnées.

    Un exemple là :

    https://docstore.mik.ua/orelly/perl/cookbook/ch15_19.htm

    Sinon, tu peux toujours t'inspirer du code source du module :

    https://fastapi.metacpan.org/source/JSTOWE/Term-Cap-1.09/Cap.pm

    Dal
    0
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    essaie ça
    #! /usr/bin/perl
    #
    $c=120000;
    
    while ($c >=1){
    	print "\b" x length ($c);
    	$c--;
    	substr($c,0)=$c;
    	print $c;
    }
    lami20j
    0
  10. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    j'ai completement oublié qu'on peut utiliser la fonction substr en tant que lvalue.

    lami20j
    0