<< Sottoprogrammi

Indice

Appendice >>

 

Utilizzo dei file

 

  • Dichiarazione di un file
  • Scrittura di un file
  • Lettura di un file
  •  

    In FORTRAN è possibile utilizzare i file per salvare l'output di un programma, così come per far leggere al programma gli input da file. Di seguito è spiegato come adoperare i file in un programma.

     

    Dichiarazione di un file

    Prima di poter utilizzare un file, questo deve essere aperto con l'istruzione:
          OPEN(UNIT=n,FILE=nome)
    A questo punto è possibile eseguire le operazioni di lettura scrittura sul file, quindi, quando non è più necessario utilizzare il file, e comunque prima della fine del programma, il file deve essere chiuso con il seguente comando:
          CLOSE(UNIT=n)
    n è un numero intero che indica l'unità logica e nome è l'nome del file, che essendo una stringa di caratteri va messa tra apici. n coincide in OPEN e CLOSE. n stabilisce la corrispondenza biunivoca tra l'operazione di apertura del file e le operazioni di lettura/scrittura e chiusura del file.
    In seguito alla chiusura, il numero di unità logica n può essere utilizzato per un'altra l'apertura.
    È permesso, dopo la chiusura di un file, riaprirlo per potervi riaccedere.
    Esempio:
          OPEN(UNIT=1,FILE='DATI')
          ..................................
          CLOSE(UNIT=1)

    La precedente è la forma più semplice per aprire un file. Si noti che se si verifica un errore durante l'apertura del file il programma non può lavorare. Per contemplare tale problema in fase di stesura del programma, si inserisce nell'istruzione OPEN il parametro ERR:
          OPEN(UNIT=n,FILE=nome,ERR=etichetta)
    Se si verifica un errore durante l'apertura del file viene eseguita l'istruzione etichettata con etichetta, altrimenti viene regolarmente aperto il file.

    L'istruzione completa di OPEN è:
          OPEN(UNIT=n,FILE=nome,ERR=etichetta,STATUS=stato)
    Dove stato può assumere i valori 'OLD', 'NEW' e 'UNKNOWN' (gli apici vanno messi), che indicano rispettivamente che il file già esiste, il file deve essere creato, non si sa se il file esiste o meno, se questo esiste viene aperto, se non esiste viene creato e poi aperto. Se STATUS viene omesso, allora si assume che sia stato='UNKNOWN'.
    Esempio:
          OPEN(UNIT=1,FILE='DATI',ERR=10,STATUS='NEW')
          ..................................
          CLOSE(UNIT=1)
          ..................................
    10  CONTINUE
          PRINT*,'Errore durante l'apertura del file'
          END

     

    Scrittura di un file

    Per poter ora scrivere nel file che è stato aperto si adopera la seguente istruzione:
          WRITE(UNIT=n,FMT=formato1)id1
    dove n è l'unità logica che è stata assegnata in fase di apertura al file, formato1 è un etichetta che rimanda ad un'istruzione di tipo FORMAT, che stabilisce il formato in cui scrivere i dati sul file, e id1 è l'identificatore della variabile da scrivere sul file. Per l'output su file è obbligatoria l'istruzione FORMAT, a differenza di quanto accadeva per PRINT.

    Esempio:
          OPEN(UNIT=1,FILE='DATI',ERR=10,STATUS='NEW')
          ..................................
          WRITE(UNIT=1,FMT=50)X
          ..................................
          CLOSE(UNIT=1)
          ..................................
    50  FORMAT(F6.3)
          ..................................
    10  CONTINUE
          PRINT*,'Errore durante l'apertura del file'
          END
     

    Lettura di un file

    Per poter leggere da un file (già contenente dei dati) che è stato aperto si adopera la seguente istruzione:
          READ(UNIT=n,FMT=formato2)id2
    dove n è l'unità logica che è stata assegnata in fase di apertura al file, formato2 è un etichetta che rimanda ad un'istruzione di tipo FORMAT, che stabilisce con quale formato leggere i dati scritti nel file, e id2 è l'identificatore della variabile nella quale inserire i dati letti dal file. Per l'input da file è obbligatoria l'istruzione FORMAT, a differenza di quanto accadeva per READ, si faccia attenzione al fatto che formato2 deve essere il formato con cui sono stati scritti i dati nel file, altrimenti i dati letti con un altro formato sarebbero differenti dai dati. Esempio: siano
    15902576°281°120
    i dati contenuti nel file scritti nel formato 8I2 (dove con ° si indica uno spazio vuoto dovuto al formato, vedi FORMAT I). Leggendo i dati contenuti nel file con il formato I2 e inserendoli in un array A (dimensionato opportunamente) si ha nell'array:
    A(1)=15        A(2)=90        A(3)=25        A(4)=76        A(5)=2        A(6)=81        A(7)=1        A(8)=20
    mentre leggendo i dati con il formato 4I4 e inserendoli in un array B (dimensionato opportunamente) si ha nell'array:
    B(1)=1590        B(2)=2576        B(3)=281        B(4)=120

    Il file ha una lunghezza finita, quindi i dati ad un certo punto finiranno e se il programma tenta di leggere oltre la fine del file si genera un errore. In alcuni casi può non essere noto a priori il numero di dati contenuti nel file, in tal caso è utile fare in modo che il programma si accorga da solo quando i dati sono finiti. Per questo motivo si inserisce nell'istruzione READ il parametro END:
          READ(UNIT=n,FMT=formato2,END=etic)id2
    Fino a che non è stato raggiunto il termine del file, il computer continua a leggerlo, non appena finiscono i dati viene eseguita l'istruzione etichettata con etic (e quindi tutte le successive).

    Esempio:
          OPEN(UNIT=1,FILE='DATI',ERR=90)
          ..................................
          I=1
    10  CONTINUE
          READ(UNIT=1,FMT=50,END=70)X(I)
          I=I+1
          GOTO 10
    70  CONTINUE
          N=I-1
          PRINT*,'Sono stati letti',N,'dati'
          ..................................
          CLOSE(UNIT=1)
          ..................................
    50  FORMAT(F6.3)
          ..................................
    90  CONTINUE
          PRINT*,'Errore durante l'apertura del file'
          END

     

    << Sottoprogrammi

    Indice

    Appendice >>