Scusami se questa è una domanda duplicata, ma non ho visto nulla di esattamente simile a questo.FORTRAN READ()
Cosa fa READ() in FORTRAN?
Ad esempio:
READ(1,82)
Scusami se questa è una domanda duplicata, ma non ho visto nulla di esattamente simile a questo.FORTRAN READ()
Cosa fa READ() in FORTRAN?
Ad esempio:
READ(1,82)
1 è l'handle di file, che è necessario aprire con il corretto invito aperto. 82 è un'etichetta che fa riferimento a un formato, ovvero a come verranno riportati i dati in termini di formattazione visiva.
program foo
implicit none
integer :: i
double precision :: a
write (*,*) 'give me an integer and a float'
read (*,82) i,a
write (*,82) i,a
82 format (I4, F8.3)
end program
In questo esempio, il programma accetta dall'input standard (il cui numero unità non è specificato, e quindi messo a *) un intero e un valore in virgola mobile. il formato dice che il numero intero occupa le prime quattro colonne, quindi ho un float che rimane in 8 colonne, con 3 cifre dopo il punto decimale
Se eseguo il programma ora, e non seguo esattamente questo formato , il programma si lamenterà e si bloccherà, poiché le prime 4 colonne dovrebbero rappresentare un numero intero (a causa del formato I4) e "5 3." non è un numero intero valido
$ ./a.out
give me an integer and a float
5 3.5
At line 7 of file test.f (Unit 5)
Traceback: not available, compile with -ftrace=frame or -ftrace=full
Fortran runtime error: Bad value during integer read
Tuttavia, una specifica corretta (si prega di notare i tre spazi prima il numero 5) si esibirà il corretto funzionamento (con un po 'di tolleranza, non è che rigorosa)
$ ./a.out
give me an integer and a float
5 3.5
5 3.500
$
Grazie amico! Stavo cercando esattamente questa spiegazione. – SRG
Si legge da "unità" (file aperto) numero 1, in base all'istruzione FORMAT sull'etichetta 82. Tuttavia, poiché l'istruzione non elenca alcuna variabile, non ha spazio per mettere i dati che sta leggendo, il che è improbabile che Aiuto; READ(1,82) FOOBAR
sarebbe più utile inserire i dati che sta leggendo nella variabile FOOBAR.
IIRC, il file numero 5 era l'equivalente di stdin e il numero 6 era l'equivalente di stdout. Il file 1 è probabilmente un file nel file system. Mi sembra di ricordare che i numeri erano pensati per mappare su unità nastro, ma era molto, molto tempo fa. –
@David, heh sì, mi riporta alla mia giovinezza! -) –
@David, @Alex, questo è stato il primo linguaggio di programmazione che ho imparato! 5 e 6 erano effettivamente gli input e output standard, ma dovevi impostare altri numeri dalla riga di comando. E potresti impostarli su qualsiasi cosa: disco, unità nastro, puncher virtuale, ecc. – azheglov
si legge dall'unità 1 utilizzando il formato specificato dal comunicato numerato 82.
e come si aggiunge la tua risposta a questa discussione? – SilentGhost
si può fare un paio di cose con l'FORTRAN "leggere" dichiarazione.
considerare: lettura (unità #, formato, opzioni) ... generico
read (7,*,end=10)
Dove, "7" è il numero di unità leggere da "*" è il formato (di default in questo caso) e "10" è il numero di linea a cui il controllo del programma salta quando il dispositivo/file di lettura raggiunge l'eof. Lo slot "opzioni" può essere riempito con elementi come "err =" numero di riga per andare a "", o iostat, advance = "no". È possibile controllare some more of these
La parte di formato è dove è possibile specificare più precisamente il formato dei dati che si prevede. Per esempio, se si dispone di un identificatore di formato come:
read (25,"(2X, 2I5, F7.3, A)")
Qui, il "2X", si riferisce a 2 posti, la "2i5", si riferisce a 2 numeri interi che sono 5 cifre, "F7.3", si riferisce a un valore decimale che ha una lunghezza totale di 7, con tre cifre dopo il decimale. La "A" si riferisce a un personaggio. Puoi dare un'occhiata ad un altro di these
CHEERS!
Quando Fortran legge da un file, richiedeva che le istruzioni READ identifichino univocamente il file. L'identificazione viene eseguita utilizzando l'identificatore dell'unità Fortran.
Un identificatore unità può essere uno dei seguenti:
1) Una variabile intera o un'espressione il cui valore è maggiore o uguale a 0.
2) L'asterisco (*) è consentito solo su LEGGI e SCRIVI le dichiarazioni. Sulle istruzioni READ, un asterisco si riferisce all'unità 100 (input standard).
numeri di modulo sono meglio forniti utilizzando newunit
open(newunit=i,file='test')
Utilizzare l'istruzione INQUIRE per verificare la validità (esistenza) di qualsiasi numero di unità prima di usarlo, come nel seguente esempio:
logical :: idok, fop
inquire (unit=i, exist=idok, opened=fop)
if (idok .and. .not. fop) then
open (unit = i, ...)
endif
Poi abbiamo l'istruzione FORMAT, un'istruzione etichettata che può apparire in qualsiasi parte del programma in cui il formato è visibile.
È di forma
READ(*,100) I, J, K
Il FORMAT dichiarazione
100 FORMAT(I10,I10,I10)
Una dichiarazione formato leggermente diverso è
100 FORMAT(3I10.8)
che cede ancora una volta tre interi allineati a destra di larghezza 10 ma questa volta richiede un minimo di 8 cifre da stampare.
Alcuni errori: l'identificativo dell'unità può essere negativo (ma non -1) e lo sarà se si riferisce a una connessione effettuata con l'identificatore 'newunit'; '*' non significa 100; 100--102 sono probabilmente ammessi; le unità 0, 5 e 6 non sono certamente associate a nulla; mentre un'istruzione 'format' può apparire ovunque, deve trovarsi nello stesso ambito inclusivo delle istruzioni di trasferimento dei dati a cui fa riferimento. – francescalus
Aggiornare il post – Zeus
Ho un codice in cui si usa '6' per l'output dello schermo. Quali sono esattamente i dettagli? – Zeus
"1" l'unità utilizzata per aprire un file in fortran e "82" specifica il formato per il comando di lettura.
open(1,file=fname,status='unknown')
read(1,82) var_name
82 format(2I5)
Il codice di cui sopra si apre un file chiamato "fname" il comando di lettura legge dal file fname come è stato aperto con un il comando di lettura dell'unità "1" e legge nel formato come specificato dal formato 82. Dettagli sulla formattazione in FORTRAN è il seguente:
nim (Integer Specification)
nfm.d (Floating point Specification)
nEm.d(Exponential Specification)
nAm (string specification)
where
"m" is the number of character spaces reserved for printing. (should be more than what you are reading otherwise read statement would not give correct results)
"n" is the number of integers, floating point, characters or exponential numbers that you want to read.
"d" are the number of decimal places up to which you want to read.
non sono sicuro che "FORTRAN" e "principiante" dovrebbe mai essere combinati. – stevedbrown