Académique Documents
Professionnel Documents
Culture Documents
Dr Komi SODOGA
antoinekomisodoga@gmail.com, UL
1er mars 2024
1 / 29
Plan
1 I- Introduction
Syntaxe générale
Entrées-sorties standards
2 / 29
I- Introduction
I- Introduction
De quoi s’agit-il ?
Les ordres d’entrée/sortie permettent de transférer des informations entre la mémoire
centrale et les unités périphériques (terminal, clavier, disque, imprimante, . . .)
Les opérations d’entrée/sortie engendrent des conversions caractères alpha-
numériques/binaires
3 / 29
I- Introduction Syntaxe générale
I- Introduction
Syntaxe générale
Lecture
read(périphérique, format [,options]) liste
Écriture
write(périphérique, format [,options]) liste
Remarques :
o les deuxièmes formes de syntaxe correspondent à l’entrée et la sortie dites
standard, c’est-à-dire l’écran !
o <options> reprend l’ensemble des arguments qui permettent une gestion des
erreurs, un contrôle du changement de ligne, . . .
4 / 29
I- Introduction Entrées-sorties standards
Entrées-sorties standards
5 / 29
I- Introduction Entrées-sorties standards
6 / 29
II- Les formats
Motivations
Le format libre est utilisé pour les échanges avec le terminal, en phase de test ou pour accéder
à des fichiers manipulés toujours sur la même machine.
Mais, pour des échanges de données plus massifs avec des fichiers ou de données dont le
format peut être imposé par des applications externes, il est souvent nécessaire de préciser
les règles de conversion en entrée ou en sortie grâce à une spécification de format.
L’utilisation des formats permet :
o Lecture : s’adapter à des données existantes non adaptées à un format libre
o Écriture : présenter des résultats comme l’on souhaite !
Le format se présente comme une liste de descripteurs : Exemple (i3,f5.3)
Deux manières de donner le format d’entrée/sortie :
o dans une instruction, dotée d’une étiquette
write(*,1000) liste
. . .
1000 format <liste_descripteur>
o dans l’instruction d’entrée/sortie elle-même
write(*,’<liste_descripteur>’) liste
7 / 29
II- Les formats
8 / 29
II- Les formats
10 / 29
II- Les formats
11 / 29
II- Les formats
12 / 29
III- Les fichiers III-1. Introduction
Outre les entrées–sorties standard qui s’opèrent via le terminal, fortran peut contrôler des
flux de données en lecture ou en écriture associés à des fichiers externes (external files),
hébergés par des périphériques (disques, CD, clef USB, ...).
Ces fichiers externes doivent être connectés à des unités logiques (logical unit) à l’aide de
l’instruction OPEN. L’instruction CLOSE permet de fermer le fichier et donc de libérer l’unité
logique préalablement connectée.
Une unité logique choisie par l’utilisateur est désignée par un entier posi- tif ou nul,
généralement entre 1 et 100, en évitant 0, 5 et 6, habituellement dédiées aux unités standard.
Quelques caractéristiques des fichiers :
• Stockage des données (enregistrements) sur le disque
• Généralement, on donne une extension .dat, .txt, .out,. . .
• Fichier est dit
o Formaté si les données sont stockées sous forme de caractères
alphanumériques
o Non formaté si les données sont stockées sous forme binaire
• Accessibilité :
o Séquentiel : lecture de tous les enregistrements précédents
o Direct : Ordre de lecture/écriture indique l’enregistrement à traiter
13 / 29
III- Les fichiers III.2- Ouverture d’un fichier
14 / 29
III- Les fichiers III.2- Ouverture d’un fichier
num unite : numéro d’unité logique (constante ou variable entière) qui désigne le fichier
dans la suite du programme
result : variable entière qui contiendra le code erreur éventuel (valeur nulle si aucune erreur)
15 / 29
III- Les fichiers III.2- Ouverture d’un fichier
position (uniquement pour fichier séquentiel) : ASIS (défaut – pas de modification de position
si fichier déjà connecté, REWIND (début de fichier), APPEND (fin de fichier)
long enreg (obligatoire si accès direct) : constante entière donnant la longueur en bytes de
l’enregistrement
16 / 29
III- Les fichiers III.3- Lecture /écriture
Lecture
Syntaxe de base :
read([unit=]<num_unite>, [fmt=]<liste_descripteurs>) <liste>
Exemple :
read(10,‘(2g15.6)’) x,y
read(10,*) x,y
read(numfich,fmt=*) x,y,chaine
read(unit=20,fmt=‘(a)’) chaine
Gestion des erreurs :
• Le paramètre iostat
• Les paramètres end,err,eor
read(10,‘(2g15.6)’,iostat=ierr) x,y
read(10,‘(2g15.6)’,end=999,eor=888) x,y
o ierr est nul : aucune er-
Paramètre Evènement
reur end fin de fichier
o ierr = entier < 0 : er-
reur de fin de fichier ou err erreur (autre que fin de
fin d’enregistrement fichier ou enregistrement)
o ierr = entier > 0 : toute
autre erreur (enregistre- eor fin d’enregistrement
ment insuffisant, fichier
devenu inaccessible,etc )
17 / 29
III- Les fichiers III.3- Lecture /écriture
Ecriture
Syntaxe de base
write([unit=]<num_unite>, [fmt=]<liste_descripteurs>) <liste>
Par exemple :
write(10,‘(2g15.6)’) x,y
write(10,*) x,y
write(numfich,fmt=*) x,y,chaine
write(unit=20,fmt=‘(a)’) chaine
Gestion des erreurs avec les paramètres iostat et err (voir lecture)
19 / 29
III- Les fichiers III.3- Lecture /écriture
20 / 29
III- Les fichiers III.3- Lecture /écriture
Namelist
On peut regrouper les variables que l’on désire lire ou écrire au sein d’une liste
à laquelle on donne un nom.
Syntaxe NAMELIST/nom_liste/liste_variables
o nom liste est le nom de la NAMELIST
o liste variables est une liste de variables précédemment déclarées
Au niveau de l’instruction READ/WRITE la namelist remplace le format ainsi
que la liste de variables qui, dans ce contexte, devient inutile.
Syntaxe : READ(Unite, nom_liste) ou READ(Unite, nom_liste)
Namelist
Exemple 1
INTEGER :: i, j, k
INTEGER :: t(3)
CHARACTER(len=11) :: ch
NAMELIST/LISTE/i,j,k,t,ch
...
READ (UNIT=1, NML=liste )
WRITE(UNIT=2, NML=liste )
Exemple 2
integer :: n
real,dimension(2) :: x
character(len=5) :: text
Fermeture
L’instruction CLOSE permet de déconnecter une unité logique d’un fichier.
Elle libère l’unité logique pour une nouvelle connexion
Syntaxe
CLOSE ([UNIT=]<entier >, ERR=<étiquette >,&
IOSTAT=<iostat >, STATUS=<stat >)
Les arguments de CLOSE sont tous optionnels sauf l’unité logique et ont la
même signification que dans l’instruction OPEN, sauf STATUS qui désigne ici
le devenir du fichier après déconnexion et peut valoir :
o ’KEEP’ (par défaut) pour conserver un fichier préexistant ;
o ’DELETE’ pour détruire le fichier à la déconnexion.
23 / 29
III- Les fichiers III.3- Lecture /écriture
L’instruction INQUIRE
L’instruction INQUIRE permet de s’enquérir de nombreux paramètres caractérisant
un flux d’entrée–sortie, notamment :
o si une unité logique est libre OPENED,
o si un fichier existe EXIST,
o quelle est la taille d’un enregistrement binaire IOLENTGH,
Elle permet aussi de restituer les paramètres avec lesquels s’est effectuée une ou-
verture de fichier : ACCESS, ACTION, DIRECT, FORM, FORMATTED, READ,
READWRITE, STREAM, SEQUENTIAL, UNFORMATTED, WRITE ; ces mots-clefs
désignent des variables de sortie de type entier ou chaı̂ne de caractère (’YES’ ou ’NO’)
Le flux interrogé peut être défini :
o soit par un nom de fichier (seule solution si le fichier n’a pas été ouvert) ;
o soit par une unité logique ;
o soit par une liste de sortie.
24 / 29
III- Les fichiers III.3- Lecture /écriture
L’instruction INQUIRE
Par exemple, avant de connecter un fichier à une unité logique via l’instruction OPEN,
on peut rechercher un numéro d’unité logique disponible et s’assurer que le fichier
existe
LOGICAL :: pris, present
INTEGER :: n = 1, nmax = 99
DO n = 1, nmax
INQUIRE(UNIT=n, OPENED=pris)
IF (.not. pris) EXIT
END DO
INQUIRE(FILE=’fichier’, EXIST=present)
IF(present) THEN
OPEN(UNIT=n, FILE=’fichier’, ...)
...
ELSE
...
END IF 25 / 29
III- Les fichiers III.3- Lecture /écriture
L’instruction INQUIRE
D’autre part, l’instruction INQUIRE permet d’évaluer la taille de l’enregistrement que
créerait l’écriture non-formatée d’une liste.
Elle permet ainsi de connaı̂tre la longueur d’un enregistrement d’un fichier non-
formaté en accès direct avant de le connecter à une unité logique, de façon à rendre
l’instruction d’ouverture du fichier indépendante de la machine.
Exemple
INTEGER :: long, iunit
INQUIRE(IOLENGTH=long) <liste d’expressions>
...
OPEN(iunit, FILE = ..., ACCESS=’direct’, FORM=’unformatted’, &
RECL=long)
26 / 29
III- Les fichiers III.3- Lecture /écriture
27 / 29
III- Les fichiers Le module intrinsèque ISO− FORTRAN− FENV
28 / 29
III- Les fichiers Le module intrinsèque ISO− FORTRAN− FENV
FILE_STORAGE_UNIT qui désigne l’unité de mesure en bits (en général 8) des tailles d’enre-
gistrement (RECL !) dans les opérations OPEN !et INQUIRE !.
Les entiers suivants rendus par IOSTAT= ! dans les cas d’échec d’opérations d’entrées/sorties
pour OPEN !) :
o IOSTAT_END qui désigne la fin de fichier ;
o IOSTAT_EOR qui désigne la fin d’enregistrement (End Of Record) ;
29 / 29