Comment puis-je format d'IMPRESSION ou d'ÉCRITURE de la déclaration de remplacer la ligne actuelle sur l'écran de la console?
Je veux afficher la progression d'un calcul fait avec une boucle sur l'écran de la console. Je peux imprimer les progrès de la variable à la borne comme ceci:
PROGRAM TextOverWrite_WithLoop
IMPLICIT NONE
INTEGER :: Number, Maximum = 10
DO Number = 1, MAXIMUM
WRITE(*, 100, ADVANCE='NO') REAL(Number)/REAL(Maximum)*100
100 FORMAT(TL10, F10.2)
! Calcultations on Number
END DO
END PROGRAM TextOverWrite_WithLoop
La sortie du code ci-dessus sur l'écran de la console est:
10.00 20.00 30.00 40.00 50.00 60.00 70.00 80.00
90.00 100.00
Tous sur la même ligne, enveloppé seulement par la fenêtre de la console.
La ADVANCE='No' argument et le TL10 (onglet à gauche afin de nombreux espaces) modifier le descripteur fonctionne bien pour remplacer le texte sur la même ligne, par exemple, la sortie du code suivant:
WRITE(*, 100, ADVANCE='NO') 100, 500
100 FORMAT(I3, 1X, TL4, I3)
Est:
500
Au lieu de:
100 500
En raison de la TL4 modifier descripteur.
À partir de ces deux cas, on peut conclure que la radiation de la déclaration ne peut pas remplacer ce qui a été écrit par une autre ÉCRITURE déclaration ou par une exécution précédente de la même ÉCRITURE satement (comme dans une boucle).
Surmonter cela en quelque sorte?
Je suis en utilisant le FTN95 compilateur sous Windows 7 RC1. (Le programme d'installation du compilateur G95 bluescreens Windows 7 RC1, même pensé qu'il fonctionne bien sur Vista.)
Je sais à propos de la question Supressing les sauts de ligne dans le Fortran 95 instructions d'écriture, mais il ne fonctionne pas pour moi, parce que la réponse à cette question implique une nouvelle sortie est ajoutée à la précédente sortie sur la même ligne; au lieu de la nouvelle sortie d'écraser la précédente sortie.
Merci d'avance.
- Le compilateur et les OS es-tu?
- compilateur = FTN95, OS = Windows 7 RC1
- Peut-être que vous devriez accepter une réponse?
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de solution à cette question dans le champ d'application de l'Fortran normes. Toutefois, si votre compilateur comprendre barre oblique inverse dans le Fortran cordes (GNU Fortran si vous utilisez l'option
-fbackslash
), vous pouvez écrireIl utilise le caractère barre oblique inverse (
\b
) pour effacer déjà écrit des caractères sur la ligne.NB: si votre compilateur ne comprends pas
advance="no"
, vous pouvez utiliser liés à des non-standard astuces, telles que l'utilisation de la$
rédacteur de devis dans la chaîne de format.Les éléments suivants doivent être portable sur l'ensemble des systèmes par l'utilisation de
ACHAR(13)
pour coder le retour chariot.La suite a parfaitement fonctionné, à l'aide de g95 fortran:
a donné:
5 Pdf
en laissant le curseur à la position de numéro 1 sur la même ligne. Sur la prochaine mise à jour,
le 5 transformé en un 10. ASCII 13 (décimal) est un retour chariot.
CARRIAGECONTROL =
n'est pas standard conforme et ré-ouverture de l'unité 6 (supposons que c'est le output_unit) peut être difficile, en particulier avec les non-standard des prescripteurs. Aussi, Holleriths sont supprimés à partir de moderne Fortran. Vous devez expliquer le sens dethe 1H+" "
. Aussi, dans la norme Fortran vous devez utiliserI0
, justeI
n'est pas autorisé.