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

Résolu/Fermé
blux
Messages postés
24156
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
2 juillet 2022
- 22 mai 2006 à 15:15
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
- 23 mai 2006 à 15:48
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.

9 réponses

lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565
22 mai 2006 à 16:52
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
blux
Messages postés
24156
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
2 juillet 2022
3 199
22 mai 2006 à 17:18
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565
22 mai 2006 à 19:32
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
blux
Messages postés
24156
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
2 juillet 2022
3 199
23 mai 2006 à 10:28
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

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

Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565
23 mai 2006 à 11:46
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
blux
Messages postés
24156
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
2 juillet 2022
3 199
23 mai 2006 à 12:41
Ben voui, mais depuis le début, je dis que veux décrémenter ;-)

Merci bien de tes explications.
0
[Dal]
Messages postés
5884
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 juin 2022
1 001
23 mai 2006 à 14:20
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565
23 mai 2006 à 15:31
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 565
23 mai 2006 à 15:48
Re,

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

lami20j
0