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