|
auteur : Germain Salvato-Vallverdu |
Il existe deux types de fichiers : les fichiers ASCII et les fichiers binaires. Les fichiers ASCII sont
des fichiers dans lesquels ce qui est écrit est formaté et lisible par quelqu'un, par exemple un fichier texte. Comme
leurs noms l'indique les fichiers binaires sont écrits en langage binaire et ne sont pas directement lisible par quelqu'un.
Il doit se servir d'un programme pour les lires et formater ce qu'ils contiennent.
En Fortran, on peut créer soit des fichiers formatés (ASCII) soit des fichiers binaires et lire ou écrire sur ces deux
types de fichiers. Pour cela on spécifie lors de l'ouverture du fichier de quel type il est avec l'option form.
Choix du type de contenu d'un fichier |
open (11, file=" fichier_binaire " , form=" unformatted " )
open (11, file=" fichier_ASCII " , form=" formatted " )
|
Par défaut, si l'on ne précise pas l'option form dans l'instruction open les fichiers sont formatés (ASCII).
|
|
auteur : Germain Salvato-Vallverdu |
On utilise les instructions read et write en spécifiant le numéro logique attribué au fichier sur lequel
on veut écrire. La syntaxe de lecture va dépendre de l'accès (direct ou séquentiel) et du type de contenu des fichiers
(ASCII ou binaire) :
Exemple lecture écriture dans un fichier |
write ( " où " , " comment " )
read ( " où " , " comment " )
open (11,file=" toto " ,form=" formatted " ,access=" sequential " )
read (11,*)entier
write (11,*)999,entier
open (11,file=" fichier_binaire " ,form=" unformatted " )
write (11)entier
read (11)entier
opent(11,file=" fichier_direct " ,form=" unformatted " ,access=" direct " )
write (11,rec=3)entier
read (11,rec=10)entier
|
|
|
auteur : Germain Salvato-Vallverdu |
Chaque ligne d'un fichier s'appelle un enregistrement. En Fortran il existe deux moyens d'accéder au contenu d'un
enregistrement : un accès direct ou un accès séquentiel. Dans un accès direct, on lit ou écrit directement
l'emplacement que l'on veut. Dans un accès séquentiel, il est nécessaire de lire tous les emplacements qui précèdent celui
que l'on souhaite lire.
De façon imagée, on peut assimiler une lecture à accès séquentiel à la lecture d'une cassette vidéo (il faut lire le début
de la cassette avant de lire la partie qui nous intéresse) ; on peut assimiler une lecture à accès direct à la lecture d'un
CD ou DVD sur lequel on lit directement la musique ou le chapitre que l'on souhaite.
Les enregistrement des fichiers à accès direct ont une taille fixe qui est déterminée à l'ouverture du fichier. Celle des
fichiers à accès séquentiel peut varier d'un enregistrement à l'autre. Si la taille des enregistrement varie beaucoup
d'une ligne à l'autre, il s'ensuit qu'un fichier séquentiel est généralement plus léger qu'un fichier direct.
On précise le type d'accès aux enregistrements du fichier par l'option acces de l'instruction open. Dans le cas
d'un accès direct il faut également préciser la longueur des enregistrements par l'option recl qui est un entier
correspondant au nombre de caractères pour les fichiers ASCII.
Choix du type d'accès aux enregistrement d'un fichier |
open (11, file=" fichier_direct " , acces=" direct " , recl=100)
open (11, file=" fichier_sequentiel " , acces=" sequential " )
|
|
|
auteur : Germain Salvato-Vallverdu |
Pour agir sur un fichier depuis un proramme Fortran on lui attribue un numéro logique. Pour cela, on utilise l'instruction
open. Le numéro logique définit le chemin qui permettra d'accéder au fichier pour le lire ou écrire dedans.
Les numéros logiques inférieurs à 10 sont réservés, on ne les utilise pas.
Synataxe générale de open |
open ( numero , file=" nom du fichier " )
open ( 11, file=" monfichier " )
open ( 23, file=fichier)
open ( i, file=" monfichier) ! où i est un entier ou une exepression arithmétique
|
Par défaut les fichiers sont des fichiers ASCII (formatés) et à accès séquentiel. Voici une syntaxe plus complète de
l'instruction open. Pour connaître l'ensemble des options consulter l'un des cours disponibles.
Syntaxe plus complète de open |
open ( numero , file=" mon_fichier " , acces=" sequential " /" direct " , &
form=" formatted " /" unformatted " , &
action=" read " /" write " /" readwrite " , &
position=" asis " /" rewind " /" append " )
|
|
|
auteur : Germain Salvato-Vallverdu |
Les fichiers sont automatiquement fermés si l'exécution rencontre une instruction stop ou end. On peut
fermer un fichier avant la fin de l'exécution du programme avec l'instruction close.
syntaxe de l'instruction close |
close ( numero logique du fichier)
close (11)
close (i)
close (2*i + 1)
|
|
|
auteur : Germain Salvato-Vallverdu |
S'il vous arrive d'écraser un de vos fichiers au cours de l'exécution de vos programmes cette option de l'instruction
open est faites pour vous. Elle permet à l'ouverture du fichier de définir ses permissions de lecture et d'écriture.
Choix des permissions à l'ouverture d'un fichier |
open (numero, file=" mon_fichier " , action=" read " )
open (numero, file=" mon_fichier " , action=" write " )
open (numero, file=" mon_fichier " , action=" readwrite " )
|
|
|
auteur : Germain Salvato-Vallverdu |
Il peut être utile à l'intérieur d'un programme Fortran, de détecter l'existence d'un fichier avant de lire ou écrire
dedans. Pour cela on utilise l'instruction inquire. Elle ne se limite pas à cela mais voici un exemple
d'utilisation pour tester l'existence d'un fichier.
|
logical ::exite
inquire ( file=" mon_fichier " , exist=existe)
If ( existe ) Then
write (*,*)" le fichier existe "
ElseIf ( .NOT. existe) Then
write (*,*)" le fichier n'existe pas "
STOP
Endif
|
|
|
auteur : Germain Salvato-Vallverdu |
Par défaut, à l'ouverture d'un fichier, on écrit ou on lit sur la première ligne du fichier. Dans l'instruction open
l'option position permet de choisir la ligne sur laquelle on se positionne lors de l'ouverture du fichier.
Ecrire à la fin du fichier |
open ( 10, file=" mon_fichier " , position=" append " )
write (10,*)" j'écris sur la dernière ligne "
|
|
|
auteur : Germain Salvato-Vallverdu |
Lors de la lecture d'un fichier, on peut rajouter dans l'instruction read l'option end=etiquette qui permet
de renvoyer l'exécution du programme à la ligne marquée par l'étiquette lorsque l'on atteind la fin du fichier. Dans
ce cas il faut utiliser les étiquettes et le format fixe.
Détection de la fin du fichier avec end |
open (10, file=" fichier " )
i=0
Do
read (10,*,end =1000)var1,var2
i = i + 1
Enddo
1000 write (*,*)" la lecture a atteind la fin du fichier "
write (*,*)" le nombre de ligne est : " ,i
|
Lors de la lecture d'un fichier, on peut rajouter dans l'instruction read l'option iostat=entier. Si
la fin du fichier est atteinte, entier prendra une valeur négative. La valeur dépend du compilateur on testera donc simplement le signe.
Détection de la fin du fichier avec iostat |
open (10, file=" fichier " )
i=0
Do
read (10,*,iostat=io)var1,var2
If ( io < 0 ) exit
i = i + 1
Enddo
write (*,*)" la lecture a atteind la fin du fichier "
write (*,*)" le nombre de ligne est : " ,i
|
|
Consultez les autres F.A.Q's
Copyright © 2008 developpez Developpez LLC.
Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite
de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans
de prison et jusqu'à 300 000 € de dommages et intérêts.