2009-07-14 6 views
5

Avant de commencer, je dois commencer par dire que je suis novice en matière de FORTRAN. Je maintiens un morceau de code hérité de 1978. Son but est de lire certaines valeurs de données d'un fichier, de traiter les valeurs, puis de sortir les valeurs traitées dans un autre fichier texte.FORTRAN WRITE()

Vu le code FORTRAN suivant:

 INTEGER NM,STUBS,I,J,K 
     PARAMETER (NM=67,STUBS=43) 
     INTEGER*4 MDS(STUBS,NM) 

     CALL OPEN$A(A$RDWR,'/home/test/data.txt', MAXPATHLEN,1) 
     CALL OPEN$A(A$WRIT,'out',11,2) 

     DO 90 I=1,2 
      READ(1,82) STUB  
      !-- data processing --!  
      WRITE(2,80) STUB,(MDS(I,J),J=1,24) 
90 CONTINUE 

80 FORMAT(/1X,A24,25I5) 
82 FORMAT(1X,A24,25F5,1) 

Ma question est en ce qui concerne la déclaration WRITE().

Je comprends que (2,80) fait référence au flux de sortie de fichier ouvert et pointant vers le fichier 'out' et référencé par le chiffre 2. Je comprends que 80 fait référence à la déclaration de format référencé par l'étiquette 80.

STUB est utilisé pour stocker les valeurs lues à partir de l'entrée de fichier 1. Ces valeurs sont ce qui est traité, et enregistré dans MDS(I,J) dans la section !-- data processing --! que j'ai omis.

Ai-je raison de supposer que (MDS(I,J),J=1,24) va écrire 24 valeurs entières dans le fichier de sortie? En d'autres termes, en boucle de 1 à 24?

+0

@Fortranner Lors de l'ajout des tags, vous devez également résoudre les problèmes de formatage ou autres de la question. –

Répondre

10

Oui, vous avez raison. La syntaxe (MDS(I,J), J=1,24) est un "implied DO-loop" et est couramment utilisée dans des situations comme celle-ci.

+0

De rien. J'ai ajouté un lien vers une documentation sur ce sujet si vous êtes intéressé. –

+0

Merci! J'ai parcouru ce site et cela m'a vraiment aidé avec cette modification! Très appréciée. – karlgrz

Questions connexes