|
|
|
|
||||||
| fr.comp.os.unix Système UNIX. |
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
n@pster 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<=100; i+=2 ) printf( "-" ); printf( "] %3d %%", p ); for(i=0;i<59;++i) printf( "%c", 8 ); fflush(stdout ); } main() { int p; for(p=0 <=100;++p){ DisplayPercent( p ); usleep(100000); } printf( "\n" ); } |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
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 <x...@x.con> wrote: > n@pster 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 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<=100; i+=2 ) printf( "-" ); > printf( "] %3d %%", p ); > > for(i=0;i<59;++i) printf( "%c", 8 ); > > fflush(stdout ); > > }main() > { > int p; > > for(p=0 <=100;++p)> { > DisplayPercent( p ); > usleep(100000); > } > printf( "\n" ); > > } |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
n@pster 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...ing-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 |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
> Les pages man de ncurses ne valent pas grand chose pour apprendre,
> essaie: > http://www.faqs.org/docs/Linux-HOWTO...ing-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... |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
> Les pages man de ncurses ne valent pas grand chose pour apprendre,
> essaie: > http://www.faqs.org/docs/Linux-HOWTO...ing-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... |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
n@pster a écrit
>> Les pages man de ncurses ne valent pas grand chose pour apprendre, >> essaie: >> http://www.faqs.org/docs/Linux-HOWTO...ing-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 |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
n@pster wrote:
>> Les pages man de ncurses ne valent pas grand chose pour apprendre, >> essaie: >> http://www.faqs.org/docs/Linux-HOWTO...ing-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:87veixwh16.fsf@u2.shayol.org BILAN1 : news:45bb70d0$0$2381$426a74cc@news.free.fr |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
> Les pages man de ncurses ne valent pas grand chose pour apprendre,
> essaie: > http://www.faqs.org/docs/Linux-HOWTO...ing-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... |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
> Les pages man de ncurses ne valent pas grand chose pour apprendre,
> essaie: > http://www.faqs.org/docs/Linux-HOWTO...ing-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... |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
n@pster <fabien.morin@gmail.com> wrote:
> > Les pages man de ncurses ne valent pas grand chose pour apprendre, > > essaie: > > http://www.faqs.org/docs/Linux-HOWTO...ing-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 |
|
|
|
#12 |
|
Messages: n/a
Hébergeur: |
Harpo <invalid@invalid.invalid> 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 |
|
|
|
#13 |
|
Messages: n/a
Hébergeur: |
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:87veixwh16.fsf@u2.shayol.org BILAN1 : news:45bb70d0$0$2381$426a74cc@news.free.fr |
|
|
|
#14 |
|
Messages: n/a
Hébergeur: |
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:87veixwh16.fsf@u2.shayol.org BILAN1 : news:45bb70d0$0$2381$426a74cc@news.free.fr |
|
|
|
#15 |
|
Messages: n/a
Hébergeur: |
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é. |
|
|
|
#16 |
|
Messages: n/a
Hébergeur: |
n@pster 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:87veixwh16.fsf@u2.shayol.org BILAN1 : news:45bb70d0$0$2381$426a74cc@news.free.fr |
|
![]() |
| Outils de la discussion | |
|
|