Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

utiliser ncurses pour afficher une barre de progression

15 réponses
Avatar
n
Bonjours !

J'ai fait un petit programme en C qui traite des milliers de fichiers
et qui affiche le traitement =E0 l'=E9cran, et j'aimerai aussi pouvoir
afficher la progression de ce traitement en bas avec une esp=E8ce de
progressbar en console, exemple :
[**************----------------------------------------------] 15,2% du
traitement
Un peut comme apt-get avec la progression du t=E9l=E9chargement des
paquets.
On m'impose d'utiliser ncurses pour impl=E9menter cette fonctionnalit=E9,
mais je ne vois pas trop comment proc=E9der.
J'ai regard=E9 un peut la doc sur
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/ mais je n'ai pas
vraiment trouv=E9 comment r=E9soudre mon probl=E8me.
J'ai cru comprendre qu'il =E9tait possible de cr=E9er des "fenetre" dans
la console avec ncurses, c'est s=FBrement ce qu'il faudrait que je fasse
: faire une fen=EAtre d'une ligne en bas de la console avec la progress
bar, mais je ne trouve pas d'exemple, d'autant plus que le r=E9sultat du
traitement des fichier doit continuer =E0 s'afficher comme avant.

Quelqu'un pourrais t'il me mettre sur la voie ou m'aider un peut ?

Fabien

10 réponses

1 2
Avatar
ALain Montfranc
a écrit
Bonjours !

J'ai fait un petit programme en C qui traite des milliers de fichiers
et qui affiche le traitement à l'écran, et j'aimerai aussi pouvoir
afficher la progression de ce traitement en bas avec une espèce de
progressbar en console, exemple :
[**************----------------------------------------------] 15,2% du
traitement
Un peut comme apt-get avec la progression du téléchargement des
paquets.
On m'impose d'utiliser ncurses pour implémenter cette fonctionnalité,
mais je ne vois pas trop comment procéder.
J'ai regardé un peut la doc sur
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/ mais je n'ai pas
vraiment trouvé comment résoudre mon problème.
J'ai cru comprendre qu'il était possible de créer des "fenetre" dans
la console avec ncurses, c'est sûrement ce qu'il faudrait que je fasse
faire une fenêtre d'une ligne en bas de la console avec la progress
bar, mais je ne trouve pas d'exemple, d'autant plus que le résultat du

traitement des fichier doit continuer à s'afficher comme avant.

Quelqu'un pourrais t'il me mettre sur la voie ou m'aider un peut ?

Fabien


Si tu n'as pas besoin de faire de l'ultra portable, un truc du style
suivant me donne toute satisfaction ;-)

#include <stdio.h>

void DisplayPercent( int p )
{
int i;
printf( "[" );
for(i=0;i<=p;i+=2) printf( "*" );
for ( ;i<0; i+=2 ) printf( "-" );
printf( "] %3d %%", p );

for(i=0;i<59;++i) printf( "%c", 8 );

fflush(stdout );
}

main()
{
int p;

for(p=0;p<0;++p)
{
DisplayPercent( p );
usleep(100000);
}
printf( "n" );
}


Avatar
n
Je n'ai pas besoin que ce soit ultra portable, et ce que tu as fais me
conviendrais très bien sauf que je suis obligé d'utiliser ncuses pour
mettre en oeuvre cette fonction (c'est imposé dans le projet).
Et puis ta méthode ne permet pas d'afficher le traitement des fichiers
en même temps que le pourcentage en bas de la console.
en tout cas, merci de ton aide quand même ;)

Amicalement

Fabien

On 25 jan, 15:14, ALain Montfranc wrote:
a écrit



Bonjours !

J'ai fait un petit programme en C qui traite des milliers de fichiers
et qui affiche le traitement à l'écran, et j'aimerai aussi pouvoir
afficher la progression de ce traitement en bas avec une espèce de
progressbar en console, exemple :
[**************----------------------------------------------] 15,2% du
traitement
Un peut comme apt-get avec la progression du téléchargement des
paquets.
On m'impose d'utiliser ncurses pour implémenter cette fonctionnalit é,
mais je ne vois pas trop comment procéder.
J'ai regardé un peut la doc sur
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/mais je n'ai pas
vraiment trouvé comment résoudre mon problème.
J'ai cru comprendre qu'il était possible de créer des "fenetre" dans
la console avec ncurses, c'est sûrement ce qu'il faudrait que je fasse
faire une fenêtre d'une ligne en bas de la console avec la progress
bar, mais je ne trouve pas d'exemple, d'autant plus que le résultat du

traitement des fichier doit continuer à s'afficher comme avant.

Quelqu'un pourrais t'il me mettre sur la voie ou m'aider un peut ?

FabienSi tu n'as pas besoin de faire de l'ultra portable, un truc du st yle
suivant me donne toute satisfaction ;-)


#include <stdio.h>

void DisplayPercent( int p )
{
int i;
printf( "[" );
for(i=0;i<=p;i+=2) printf( "*" );
for ( ;i<0; i+=2 ) printf( "-" );
printf( "] %3d %%", p );

for(i=0;i<59;++i) printf( "%c", 8 );

fflush(stdout );

}main()
{
int p;

for(p=0;p<0;++p)
{
DisplayPercent( p );
usleep(100000);
}
printf( "n" );

}




Avatar
Harpo
wrote:

Je n'ai pas besoin que ce soit ultra portable, et ce que tu as fais me
conviendrais très bien sauf que je suis obligé d'utiliser ncuses pour
mettre en oeuvre cette fonction (c'est imposé dans le projet).


Rajoute #include <ncurses.h> en tête du source comme ça tu es sûr de
pouvoir dire que tu utilises ncurses.

Et puis ta méthode ne permet pas d'afficher le traitement des fichiers
en même temps que le pourcentage en bas de la console.


Les pages man de ncurses ne valent pas grand chose pour apprendre,
essaie:
http://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html

--
Page maison : http://patrick.davalan.free.fr/
Propositions sur Usenet-fr : http://www.alea.net/usenet/fr/etat/
Comment voter : http://www.alea.net/usenet/fr/fur/minis-faqs/vote.php

Avatar
n
Les pages man de ncurses ne valent pas grand chose pour apprendre,
essaie:
http://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html


Ouais, mais j'ai beau lire ces pages, compiler des exemples etc.. je
pense avoir un peut près compris le fonctionnement global, mais je ne
sais même pas si ce que je veux faire est possible.
En tout cas, je vois pas comment, c'est pour ça que je poste ici, des
fois qu'un gars aurais déjà tenté des choses similaires ou qu'il
saurait comment s'y prendre...

Avatar
n
Les pages man de ncurses ne valent pas grand chose pour apprendre,
essaie:
http://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html


Ouais, mais j'ai beau lire ces pages, compiler des exemples etc.. je
pense avoir un peut près compris le fonctionnement global, mais je ne
sais même pas si ce que je veux faire est possible.
En tout cas, je vois pas comment, c'est pour ça que je poste ici, des
fois qu'un gars aurais déjà tenté des choses similaires ou qu'il
saurait comment s'y prendre...

Avatar
ALain Montfranc
a écrit
Les pages man de ncurses ne valent pas grand chose pour apprendre,
essaie:
http://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html


Ouais, mais j'ai beau lire ces pages, compiler des exemples etc.. je
pense avoir un peut près compris le fonctionnement global, mais je ne
sais même pas si ce que je veux faire est possible.
En tout cas, je vois pas comment, c'est pour ça que je poste ici, des
fois qu'un gars aurais déjà tenté des choses similaires ou qu'il
saurait comment s'y prendre...


C'est pas dur, tu positionne le curseur là ou tu veux ecrire et tu
ecrits ;-)

Pour effacer tu affiches des espaces


Avatar
Harpo
wrote:

Les pages man de ncurses ne valent pas grand chose pour apprendre,
essaie:
http://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html


Ouais, mais j'ai beau lire ces pages, compiler des exemples etc.. je
pense avoir un peut près compris le fonctionnement global, mais je ne
sais même pas si ce que je veux faire est possible.


C'est certainement possible, la preuve : d'autres le font.

En fait, si j'ai bien compris, il s'agit de placer un asterisque à 1
certain endroit de l'écran en augmentant l'abscisse à chaque fois et de
placer un nom de fichier à un endroit absolu. ncurses peut le faire
mais mes souvenirs sont au mieux confus.

Ce que je ferais maintenant si je devais le faire, c'est regarder la doc
de ncurses bien sûr mais aussi de regarder des sources de programmes
qui le font, tu parlais de apt-get dans ton post d'origine, je ne suis
pas sûr qu'il utilise ncurses mais c'est possible. sinon il y a dialog,
il utilise certainement ncurses, regarder les sources pourrait être
instructif.

--
NOUVELLE proposition pour USENET-FR :
AAD1 : news:
BILAN1 : news:45bb70d0$0$2381$


Avatar
n
Les pages man de ncurses ne valent pas grand chose pour apprendre,
essaie:
http://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html


Ouais, mais j'ai beau lire ces pages, compiler des exemples etc.. je
pense avoir un peut près compris le fonctionnement global, mais je ne
sais même pas si ce que je veux faire est possible.
En tout cas, je vois pas comment, c'est pour ça que je poste ici, des
fois qu'un gars aurais déjà tenté des choses similaires ou qu'il
saurait comment s'y prendre...

Avatar
n
Les pages man de ncurses ne valent pas grand chose pour apprendre,
essaie:
http://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html


Ouais, mais j'ai beau lire ces pages, compiler des exemples etc.. je
pense avoir un peut près compris le fonctionnement global, mais je ne
sais même pas si ce que je veux faire est possible.
En tout cas, je vois pas comment, c'est pour ça que je poste ici, des
fois qu'un gars aurais déjà tenté des choses similaires ou qu'il
saurait comment s'y prendre...

Avatar
talon
wrote:
Les pages man de ncurses ne valent pas grand chose pour apprendre,
essaie:
http://www.faqs.org/docs/Linux-HOWTO/NCURSES-Programming-HOWTO.html


Ouais, mais j'ai beau lire ces pages, compiler des exemples etc.. je
pense avoir un peut près compris le fonctionnement global, mais je ne
sais même pas si ce que je veux faire est possible.
En tout cas, je vois pas comment, c'est pour ça que je poste ici, des
fois qu'un gars aurais déjà tenté des choses similaires ou qu'il
saurait comment s'y prendre...



A tout hasard, avant de faire un monstre en C, tu devrais regarder si tu
peux faire ton truc en python, en 10 fois moins de lignes et de temps.
Il y a un bon support de curses, et en outre si tu veux des choses plus
compliquées tu peux aller voir du coté de la librairie urwid
http://excess.org/urwid/
Regardes en particulier
http://excess.org/urwid/examples.html
tu verras si ça t'impressionne ou pas. Question documentation tu as un
howto de Eric Raymond soi même:
http://www.amk.ca/python/howto/curses/
A mon humble avis, à moins d'avoir le couteau sous la gorge pour le faire
en C, c'est la meilleure solution.

--

Michel TALON


1 2