2009-07-14 7 views
5

Prima di iniziare, devo prefigurare affermando che sono un principiante quando si tratta di FORTRAN. Sto mantenendo un pezzo di codice legacy del 1978. Lo scopo è leggere alcuni valori di dati da un file, elaborare i valori e quindi inviare i valori elaborati a un altro file di testo.FORTRAN WRITE()

Dato il seguente codice FORTRAN:

 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) 

La mia domanda è per quanto riguarda la dichiarazione WRITE().

Sono consapevole che (2,80) riferisce al flusso di output file aperto e punta al file 'out' e fatto riferimento con il numero 2. comprendo che 80 si riferisce alla comunicazione formato di riferimento per etichetta 80.

STUB è utilizzato per memorizza i valori letti dall'input del file 1. Questi valori sono ciò che viene elaborato e salvati in MDS(I,J) nella sezione !-- data processing --! che ho omesso.

Sono corretto nel presupporre che (MDS(I,J),J=1,24) scriverà 24 valori interi nel file di output? In altre parole, looping da 1 a 24?

+0

@Fortranner Quando si aggiungono i tag, è necessario pulire anche la formattazione o altri problemi nella domanda. –

risposta

10

Sì, sei corretto. La sintassi (MDS(I,J), J=1,24) è un "implied DO-loop" ed è comunemente usata in situazioni come questa.

+0

Prego. Ho aggiunto un link ad una documentazione su questo se sei interessato. –

+0

Grazie! Ho esaminato quel sito ed è stato sicuramente un aiuto con questa modifica! Molto apprezzato. – karlgrz