Fortran - Sortie d'entrée de fichier
Fortran vous permet de lire et d'écrire des données dans des fichiers.
Dans le dernier chapitre, vous avez vu comment lire et écrire des données sur le terminal. Dans ce chapitre, vous étudierez les fonctionnalités d'entrée et de sortie de fichier fournies par Fortran.
Vous pouvez lire et écrire dans un ou plusieurs fichiers. Les instructions OPEN, WRITE, READ et CLOSE vous permettent d'y parvenir.
Ouverture et fermeture de fichiers
Avant d'utiliser un fichier, vous devez ouvrir le fichier. leopenLa commande est utilisée pour ouvrir des fichiers en lecture ou en écriture. La forme la plus simple de la commande est -
open (unit = number, file = "name").
Cependant, l'instruction ouverte peut avoir une forme générale -
open (list-of-specifiers)
Le tableau suivant décrit les spécificateurs les plus couramment utilisés -
Sr. Non | Spécificateur et description |
---|---|
1 | [UNIT=] u Le numéro d'unité u peut être n'importe quel nombre compris entre 9 et 99 et il indique le fichier, vous pouvez choisir n'importe quel nombre, mais chaque fichier ouvert dans le programme doit avoir un numéro unique |
2 | IOSTAT= ios Il s'agit de l'identificateur d'état des E / S et doit être une variable entière. Si l'instruction open réussit, la valeur ios renvoyée est zéro, sinon une valeur différente de zéro. |
3 | ERR = err C'est une étiquette vers laquelle le contrôle saute en cas d'erreur. |
4 | FILE = fname Nom de fichier, une chaîne de caractères. |
5 | STATUS = sta Il montre l'état antérieur du fichier. Une chaîne de caractères et peut avoir l'une des trois valeurs NEW, OLD ou SCRATCH. Un fichier de travail est créé et supprimé lorsqu'il est fermé ou lorsque le programme se termine. |
6 | ACCESS = acc C'est le mode d'accès aux fichiers. Peut avoir l'une des deux valeurs, SEQUENTIAL ou DIRECT. La valeur par défaut est SEQUENTIAL. |
sept | FORM = frm Il donne l'état de formatage du fichier. Peut avoir l'une des deux valeurs FORMATTED ou UNFORMATTED. La valeur par défaut est UNFORMATTED |
8 | RECL = rl Il spécifie la longueur de chaque enregistrement dans un fichier à accès direct. |
Une fois le fichier ouvert, il est accessible par des instructions de lecture et d'écriture. Une fois terminé, il doit être fermé à l'aide duclose déclaration.
L'instruction close a la syntaxe suivante -
close ([UNIT = ]u[,IOSTAT = ios,ERR = err,STATUS = sta])
Veuillez noter que les paramètres entre parenthèses sont facultatifs.
Example
Cet exemple montre l'ouverture d'un nouveau fichier pour écrire des données dans le fichier.
program outputdata
implicit none
real, dimension(100) :: x, y
real, dimension(100) :: p, q
integer :: i
! data
do i=1,100
x(i) = i * 0.1
y(i) = sin(x(i)) * (1-cos(x(i)/3.0))
end do
! output data into a file
open(1, file = 'data1.dat', status = 'new')
do i=1,100
write(1,*) x(i), y(i)
end do
close(1)
end program outputdata
Lorsque le code ci-dessus est compilé et exécuté, il crée le fichier data1.dat et y écrit les valeurs des tableaux x et y. Et puis ferme le fichier.
Lecture et écriture dans le fichier
Les instructions de lecture et d'écriture sont respectivement utilisées pour lire et écrire dans un fichier.
Ils ont la syntaxe suivante -
read ([UNIT = ]u, [FMT = ]fmt, IOSTAT = ios, ERR = err, END = s)
write([UNIT = ]u, [FMT = ]fmt, IOSTAT = ios, ERR = err, END = s)
La plupart des prescripteurs ont déjà été abordés dans le tableau ci-dessus.
Le spécificateur END = s est une étiquette d'instruction où le programme saute, lorsqu'il atteint la fin du fichier.
Example
Cet exemple illustre la lecture et l'écriture dans un fichier.
Dans ce programme, nous lisons à partir du fichier, nous avons créé dans le dernier exemple, data1.dat, et l'affiche à l'écran.
program outputdata
implicit none
real, dimension(100) :: x, y
real, dimension(100) :: p, q
integer :: i
! data
do i = 1,100
x(i) = i * 0.1
y(i) = sin(x(i)) * (1-cos(x(i)/3.0))
end do
! output data into a file
open(1, file = 'data1.dat', status='new')
do i = 1,100
write(1,*) x(i), y(i)
end do
close(1)
! opening the file for reading
open (2, file = 'data1.dat', status = 'old')
do i = 1,100
read(2,*) p(i), q(i)
end do
close(2)
do i = 1,100
write(*,*) p(i), q(i)
end do
end program outputdata
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -
0.100000001 5.54589933E-05
0.200000003 4.41325130E-04
0.300000012 1.47636665E-03
0.400000006 3.45637114E-03
0.500000000 6.64328877E-03
0.600000024 1.12552457E-02
0.699999988 1.74576249E-02
0.800000012 2.53552198E-02
0.900000036 3.49861123E-02
1.00000000 4.63171229E-02
1.10000002 5.92407547E-02
1.20000005 7.35742599E-02
1.30000007 8.90605897E-02
1.39999998 0.105371222
1.50000000 0.122110792
1.60000002 0.138823599
1.70000005 0.155002072
1.80000007 0.170096487
1.89999998 0.183526158
2.00000000 0.194692180
2.10000014 0.202990443
2.20000005 0.207826138
2.29999995 0.208628103
2.40000010 0.204863414
2.50000000 0.196052119
2.60000014 0.181780845
2.70000005 0.161716297
2.79999995 0.135617107
2.90000010 0.103344671
3.00000000 6.48725405E-02
3.10000014 2.02930309E-02
3.20000005 -3.01767997E-02
3.29999995 -8.61928314E-02
3.40000010 -0.147283033
3.50000000 -0.212848678
3.60000014 -0.282169819
3.70000005 -0.354410470
3.79999995 -0.428629100
3.90000010 -0.503789663
4.00000000 -0.578774154
4.09999990 -0.652400017
4.20000029 -0.723436713
4.30000019 -0.790623367
4.40000010 -0.852691114
4.50000000 -0.908382416
4.59999990 -0.956472993
4.70000029 -0.995793998
4.80000019 -1.02525222
4.90000010 -1.04385209
5.00000000 -1.05071592
5.09999990 -1.04510069
5.20000029 -1.02641726
5.30000019 -0.994243503
5.40000010 -0.948338211
5.50000000 -0.888650239
5.59999990 -0.815326691
5.70000029 -0.728716135
5.80000019 -0.629372001
5.90000010 -0.518047631
6.00000000 -0.395693362
6.09999990 -0.263447165
6.20000029 -0.122622721
6.30000019 2.53026206E-02
6.40000010 0.178709000
6.50000000 0.335851669
6.59999990 0.494883657
6.70000029 0.653881252
6.80000019 0.810866773
6.90000010 0.963840425
7.00000000 1.11080539
7.09999990 1.24979746
7.20000029 1.37891412
7.30000019 1.49633956
7.40000010 1.60037732
7.50000000 1.68947268
7.59999990 1.76223695
7.70000029 1.81747139
7.80000019 1.85418403
7.90000010 1.87160957
8.00000000 1.86922085
8.10000038 1.84674001
8.19999981 1.80414569
8.30000019 1.74167395
8.40000057 1.65982044
8.50000000 1.55933595
8.60000038 1.44121361
8.69999981 1.30668485
8.80000019 1.15719533
8.90000057 0.994394958
9.00000000 0.820112705
9.10000038 0.636327863
9.19999981 0.445154816
9.30000019 0.248800844
9.40000057 4.95488606E-02
9.50000000 -0.150278628
9.60000038 -0.348357052
9.69999981 -0.542378068
9.80000019 -0.730095863
9.90000057 -0.909344316
10.0000000 -1.07807255