11
votes

Comment puis-je chasser la sortie dans le fichier après chaque écriture avec un programme GFORTRAN FORTRAN 90?

Je gère une boucle dans un programme Fortran 90 qui génère des valeurs numériques à un fichier de sortie pour chaque itération de la boucle. Le problème est que la sortie n'est pas enregistrée dans le fichier, mais toutes les étapes. Comment puis-je l'obtenir pour chasser chaque étape?

Exemple de code: P>

open(unit=1,file='output')

do i = 1, 1000
 write(1,*) i
end do

close(unit=1)


0 commentaires

4 Réponses :



6
votes

Dans l'autre sens, si GforTran l'enferme, consiste à appeler le sous-programme de sous-programme non standard. Tous les compilateurs ne mettent pas en œuvre cela.


2 commentaires

Flush En tant que sous-programme (comme dans Call Flush () ) est non standard, mais l'instruction FLUSH est valide FORTRAN 2003: Flush ( 10)


Du site Web de GNU, il est indiqué que: la déclaration de flush intrinsèque de rinçage et la Fortran 2003 ont un effet identique: ils rimentent le tampon d'E / S de la bibliothèque d'exécution afin que les données deviennent visibles à d'autres processus. Cela ne garantit pas que les données sont engagées dans le disque.



1
votes

Quand j'ai besoin de chasser, je ferme simplement le fichier et rouvrir. Ceci est maladroit et lent, mais je ne sais pas d'une meilleure façon de faire de la Fortran 90 qui fonctionnera avec tous les compilateurs.


0 commentaires

0
votes

La suggestion de "user152979" était excellente et utile - 10 ans plus tard! J'utilise un PRGM de MS-DOS FORTRAN 5.1 construit pour transférer des programmes et des données sur une SBC Z80 sur mesure (ordinateur unique). La chose est un petit prototype et n'a que des ports série. Pour le faire fonctionner avec une carte expérimentale Pentium MMX, (qui exécute MS-DOS), j'avais besoin d'un petit programme de lecture en lecture. Fortran ajusté la facture et la .exe convient à une disquette (aucun accès Internet sur la carte MMX). Mais les données téléchargées sur le Z80 deviennent brouillées, si j'ai écrit au port COM1.

s'avère que Fortran a été tamponnant les données. Je ne faisais que partie de chaque 10 record du Z80. Fermer le fichier COM1 (le périphérique de sortie) et la réouverture après avoir écrit chaque enregistrement de texte, a provoqué une rinçage de la mémoire tampon, et le petit téléchargeur de Fortran (et le Z80 SBC) fonctionne maintenant parfaitement.

Donc, même si votre version de Fortran ne prend pas en charge un opérateur "flush", ferme et redéfinit immédiatement le fichier travaillé bien pour rincer le contenu du tampon sur l'appareil.

Remarque latérale sur l'utilisation de DOS à écrire sur le port COM1: Je devais organiser des punaises de port série RS-232C CTS en pins DTR, DCD et DSR de sorte que MS-DOS puisse "voir" et écrire sur le port série. Dans les versions ultérieures de MS-DOS (c.-à-d. "Windows"), vous pouvez utiliser la commande MODE pour définir les valeurs du port COM et CTS sur OFF, mais avec DOS d'origine, vous devez utiliser un fer à souder. Et vous devez rincer toutes les données tamponnées, après chaque écriture d'enregistrement. User152979 dit que cela se rapproche et re-ouvert est "maladroit et lent", mais dans mon cas, cet astuce a parfaitement fonctionné.


0 commentaires