Bonjour,
Je cherche à coder en Fortran une barre de progression dans une boucle DO (équivalent à la waitbar Matlab, pour ceux qui connaissent).
Pour ça j'utilise l'option ADVANCE = 'NO' pour écrire à l'écran ma progression (succession de '=' suivie du pourcentage de calcul effectué), et je réactualise la ligne à chaque itération en supprimant (écriture de backspace 'char(8)') la partie de la ligne concernée puis en écrivant à nouveau la progression (mise à jour par pas de 2%).
Voici ce que j'ai codé, sous forme de sous-routine (je l'utilise plusieurs fois dans mon programme) et que j'appelle au début de chaque itération d'une boucle :
Mon problème est que seule la dernière itération s'affiche (barre complète) et uniquement à la fin du calcul. Visiblement le problème viendrait de l'option ADVANCE='NO', puisque je n'ai aucun problème pour écrire sur des lignes successives le pourcentage effectué à chaque itération.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 subroutine waitbar(iter,niter) ! affichage waitbar + pourcentage calcul implicit none integer*4 niter,iter,i if (mod(100*(real(iter)/real(niter)),real(2)) == 0) then do i=1,7 write(*,'(a1)',advance='no') char(8) enddo write(*,'(a2)',advance='no') '=>' write(*,'(a1,i3,a2)',advance='no') + ' ',nint(100*(real(iter)/real(niter))),' %' endif end
Quelqu'un a-t-il déjà codé ce genre de chose, et pourrait m'éclairer ?
Merci pour vos réponses.
PS je compile avec Compaq Visual Fortran 6.5 sous Windows XP, ainsi que f90 sous unix et aucun ne marche.
Partager