IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Les fichiers
        Comment est écrit le contenu d'un fichier ?
        Comment lire ou écrire dans un fichier ?
        Comment FORTRAN accède-t-il au contenu d'un fichier ?
        Comment ouvrir un fichier ?
        Comment fermer un fichier ?
        Comment protéger un fichier en écriture ?
        Comment tester l'existance d'un fichier ?
        Comment écrire directement à la fin d'un fichier ?
        Comment repérer la fin d'un fichier ?



Comment est écrit le contenu d'un fichier ?
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 leur nom 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
 ! ouverture d'un fichier binaire
 open(11, file="fichier_binaire", form="unformatted")

 ! ouverture d'un fichier ASCII
 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).


Comment lire ou écrire dans un fichier ?
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
 ! pour lire sur un fichier séquentiel formaté
 write( "", "comment")

 ! pour écrire sur un fichier séquentiel formaté
 read( "", "comment")

 ! on associe le fichier toto au numéro logique 11
 open(11,file="toto",form="formatted",access="sequential")

 ! on lit un entier sur toto
 read(11,*)entier

 ! on écrit un entier sur toto
 write(11,*)999,entier

 ! pour lire/écrire sur un fichier binaire on ne précise pas le format 
 open(11,file="fichier_binaire",form="unformatted")
 write(11)entier
 read(11)entier

 ! pour lire/écrire sur un fichier à accès direct on précise l'enregistrement à lire
 opent(11,file="fichier_direct",form="unformatted",access="direct")
 write(11,rec=3)entier
 read(11,rec=10)entier

Comment FORTRAN accède-t-il au contenu d'un fichier ?
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
 ! ouverture d'un fichier à accès direct avec 100 caractères par enregistrement (=lignes)
 open(11, file="fichier_direct", acces="direct", recl=100)

 ! ouverture d'un fichier à accès séquentiel
 open(11, file="fichier_sequentiel", acces="sequential")

Comment ouvrir un fichier ?
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
 ! syntaxe minimale
 open( numero , file="nom du fichier")

 ! exemples
 open( 11, file="monfichier")
 open( 23, file=fichier)    !  fichier est une variable chaine de caractère
 open( i, file="monfichier) !  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
 ! syntaxe complète
 open( numero , file="mon_fichier", acces="sequential"/"direct",       &
                                    form="formatted"/"unformatted",    &
                                    action="read"/"write"/"readwrite", &
                                    position="asis"/"rewind"/"append" )

Comment fermer un fichier ?
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
 ! fermeture du fichier
 close( numero logique du fichier)

 ! exemples
 close(11)
 close(i)
 close(2*i + 1)

Comment protéger un fichier en écriture ?
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
 ! ouverture en lecture seule
 open(numero, file="mon_fichier", action="read")

 ! ouverture en écriture seule
 open(numero, file="mon_fichier", action="write")

 ! ouverture en lecture et écriture (défaut)
 open(numero, file="mon_fichier", action="readwrite")

Comment tester l'existance d'un fichier ?
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.
 ! on utilise une variable logique
 logical::exite

 ! on teste l'existence de mon_fichier
 inquire( file="mon_fichier", exist=existe)

 ! la réponse est dans la variable existe
 If    ( existe ) Then
    ! existe = .true.
    write(*,*)"le fichier existe"
 ElseIf( .NOT. existe) Then
    ! existe = .false.
    write(*,*)"le fichier n'existe pas"
    STOP 
 Endif

Comment écrire directement à la fin d'un fichier ?
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
 ! on ouvre le fichier avec position = "append"
 open( 10, file="mon_fichier", position="append")

 ! on va écrire à la suite du fichier
 write(10,*)"j'écris sur la dernière ligne"

Comment repérer la fin d'un fichier ?
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
      ! on va lire un fichier dont on ne connait pas le nombre de ligne
      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
 ! on va lire un fichier dont on ne connait pas le nombre de ligne
 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


Valid XHTML 1.1!Valid CSS!

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.