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

5 réponses

1 2
Avatar
talon
Harpo wrote:
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.



Un exemple qui réalise ce genre de choses trés simplement:le programme
fdformat sous FreeBSD, écrit des F, V, ou E au fur et à mesure de la
progression du formattage. Voici comment il fait:
if(!quiet && !((track + 1) % tracks_per_dot)) {
putchar('F');
fflush(stdout);
}

if(!quiet && !((track + 1) % tracks_per_dot)) {
if (!verify_only)
putchar('b'); <--- ce qui fait que ça marche
if (error) {
putchar('E');
error = 0;
}
else
putchar('V');
fflush(stdout);
}



--

Michel TALON

Avatar
Harpo
Michel Talon wrote:

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.


Je crois qu'il a le couteau sous la gorge.
Son programme doit copier des tas de fichiers, c'est peut-être pour une
installation de distribution alors qu'il n'y a qu'un système minimal.
Ou alors c'est un exercice d'étudiant.
Ou bien le chef ne veut que du C.

Sinon, je ne vois pas pourquoi faire ça en C...

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

Avatar
Harpo
Michel Talon wrote:

Un exemple qui réalise ce genre de choses trés simplement:le programme
fdformat sous FreeBSD, écrit des F, V, ou E au fur et à mesure de la
progression du formattage. Voici comment il fait:
if(!quiet && !((track + 1) % tracks_per_dot)) {
putchar('F');
fflush(stdout);
}

if(!quiet && !((track + 1) % tracks_per_dot)) {
if (!verify_only)
putchar('b'); <--- ce qui fait que ça marche
if (error) {
putchar('E');
error = 0;
}
else
putchar('V');
fflush(stdout);
}


L'algo m'a l'air tout à fait bon, Il veut en plus afficher sur une ligne
fixe de l'écran et afficher le %age à droite, mais l'algo peut être
repris en changeant au niveau des putchar ds appels à ncurses.

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

Avatar
n
C'est en effet un exercice d'étudiant !
Je dois donc respecter les contraintes, même si il y a plus simple.
Mais ça y est, j'ai réussi à me dépatouiller avec ncurses (je suis en
train en fait ;) ).
Le but du programme était de retager tous les mp3 d'un repertoire et
d'afficher la progression.
Mais on est obligé de mettre des usleep parce que même pour 300 mp3,
c'est quasiment instantanés.

Si ça intéresse quelqu'un je pourrais vous donner notre code, on le
met sous GPL.

Sinon, j'essairai de vous donner notre solution pour répondre au
problème en utilisant ncurses dès que j'aurais terminé.
Avatar
Harpo
wrote:

Sinon, j'essairai de vous donner notre solution pour répondre au
problème en utilisant ncurses dès que j'aurais terminé.


Suivant qu'il s'agit de pb C ou non on pourra aller sur fclc.

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

1 2