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

Résolu/Fermé
blux Messages postés 25978 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 avril 2024 - 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.
A voir également:

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 567
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 25978 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 avril 2024 3 287
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 567
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 25978 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 avril 2024 3 287
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 567
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 25978 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 avril 2024 3 287
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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
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 567
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 567
23 mai 2006 à 15:48
Re,

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

lami20j
0