IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

[Fortran 95] Subroutine pour ouvrir un fichier


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Par défaut [Fortran 95] Subroutine pour ouvrir un fichier
    je code en f95, et je doit ouvrir un fichier texte.
    Vu comme je compte ouvrir des fichiers pour lecture à plusieurs endroits dans le programme, je veux savoir si c'est possible de créer un subroutine pour ouvrir des fichier. (en passant comme argument le fichier à ouvrir par exemple?)

    Je ne pense pas que ce soit possible, mais je voulais être sûr.
    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 79
    Par défaut Ouverture fichier en sous-routine
    Je ne vois pas pourquoi ce ne serait pas possible ? peut-être ai-je mal compris la question ?
    A mon avis, le problème ce n'est pas tant d'ouvrir un fichier... mais de le faire de sorte que tu n'assignes pas plusieurs fois la meme unité à des fichiers différents.
    Peux tu préciser ton problème voire nous donner un exemple minimal qui te pousse à croire que ce n'est pas possible ?

  3. #3
    Membre émérite
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Par défaut
    Non je pense que ce n'est pas possible d'ouvrir les fichiers dans une subroutine et de les utiliser ailleurs.

    Quand le programme rencontre un end (comme à la fin d'une subroutine) il ferme les fichiers ouvert, donc je ne pense pas que ça marche.

    D'une manière générale le plus commun est de mettre les ouverture de fichier et les impressions dans le programme principal et les calculs dans des subroutines. Ou alors au contraire, tu calcules ce que tu veux mettre dans un fichier, tu le stockes et tu l'envoies dans une subroutine qui ouvrira le fichier, écrira dedans et le fermera.

    Si tu as des données similaires à imprimer tu peux imaginer une subroutine qui reçoit en argument le nom du fichier, le format d'impression et le tableau à imprimer (avec la dimension du tableau) et tu appelle cette subroutine à chaque fois que tu veux imprimer quelque chose. Si tu veux l'appeler plusieurs fois pour le même fichier il faut que tu utilise position="append" dans l'open du fichier pour que ça écrive à la suite et n'écrase pas le contenu du fichier.

  4. #4
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    cela fonctiontionne à condition d'avoir une mémoire tampon e.g. tu ouvre le fichier, le lit et met sont contenu dans une variable (de type à définir sinon c'est chaine de carac...) ensuite tu bosse sur la variable...
    enfin tu a la procedure qui écri ta variable dans le fichier...

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Citation Envoyé par Ladgalen Voir le message
    Non je pense que ce n'est pas possible d'ouvrir les fichiers dans une subroutine et de les utiliser ailleurs.

    Quand le programme rencontre un end (comme à la fin d'une subroutine) il ferme les fichiers ouvert, donc je ne pense pas que ça marche.
    C'est faux.

    Un fichier est ouvert au open ou au premier read/write et sera fermer au close
    ou à la fin du programme, mais pas de la routine où il a été ouvert.

    J'utilise la stratégie suivante très souvent et ça fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    module ModuleObjet
       implicit none
       type TObjet
          ...
       end type
     
    contains
     
    subroutine OuvreFichier(NomFichier)
    ... open(unit, NomFichier)
    end subroutine
     
    subroutine LireFichier(Objet, ...,CodeErreur)
    ... read (...) Objet%Champs1, ...
    end subroutine
    end module
     
    program UseObjet
       use ModuleObjet
       implicit none
       type (TObjet) :: MonObjet
     
       call OuvreFichier('...')
       do
          call LireFichier(MonObjet,,...,CodeErreur)
          if (CodeErreur /= 0) exit
          traitement de MonObjet
       enddo
       call FermeFichier()
       ...
    J'utilisais une stratégie semblable en F77, sans module, mais avec des routines externes et ça fonctionnait très bien.

  6. #6
    Membre émérite
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Par défaut
    Désolé , mais j'ai bien dis que j'étais pas sur, il me semblait avoir eu un problème à cause de ça une fois ...

    J'aime beaucoup ta méthode sylvain, je la trouve très élégante. Le code erreur que tu récupère c'est la valeur de iostat que tu met dans le read ou write ?

    Tu as une façon générale d'écrire ton objet pour que ça marche pour tout un tas de donnée ou tu es obligé de l'adapté à chaque fois ?

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Citation Envoyé par Ladgalen Voir le message
    Le code erreur que tu récupère c'est la valeur de iostat que tu met dans le read ou write ?
    Le code d'erreur correspond généralement au iostat, mais il est possible que je l'enrichisse de validation que j'effectue moi-même sur les données.

    Citation Envoyé par Ladgalen Voir le message
    Tu as une façon générale d'écrire ton objet pour que ça marche pour tout un tas de donnée ou tu es obligé de l'adapté à chaque fois ?
    Disons que je n'ai pas eu un grand succès à développer un module standard, surtout à cause du formatage des données. J'ai donc tendance à utiliser un « modèle » que j'adapte. Contrairement à la solution simplifiée de l'exemple, je travaille généralement avec une variable contenant des informations générales sur le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    type TFichier
       character (256) Nom
       integer         Unit
       ...
    end type
    Cette variable est passée à chaque appel, de sorte que le module peut être utilisé pour plusieurs fichiers à la fois. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    subroutine FichierOuvrir(Fichier,Nom,Erreur)
       type (TFichier), intent(out) :: Fichier
       charcater (*), intent(in) :: Nom
       integer, intent(out) :: Erreur
     
       Fichier%Unit = NewFileUnit()
       Fichier%Nom = Nom
       open(unit=Fichier%Unit, ...,iostat=...)
       return
     
    subroutine FichierLire(Fichier,...)
       type (TFichier), intent(inout) :: Fichier
       ...
       read(unit=Fichier%Unit, ...)
    De plus, dans ma pratique, j'utilise beaucoup les fichiers .INI (http://fr.wikipedia.org/wiki/Fichier_INI) et les fichiers .CSV (http://fr.wikipedia.org/wiki/Comma-separated_values).

    J'ai des modules standards pour manipuler ces fichiers. Les données sont passées sous forme de chaîne de caractères. L'appelant est donc responsable du formatage. J'aurai alors un module dépendant du type de données ayant des routines Ouvrir et Lire, mais l'ouverture et la lecture physique seront cascadées au module INI ou CSV. Par exemple, si les données sont stockées dans un fichier INI, la routine MonObjetOuvrir :
    • appelera FichierIniOuvrir, puis
    • appelera FichierIniLire pour lire l'entête, puis
    • validera que l'entête et acceptable.

Discussions similaires

  1. Problème pour ouvrir des fichiers .exe et .jar via une page html
    Par coyaote dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/02/2007, 12h28
  2. Problème pour ouvrir un fichier avec firefox 2.0
    Par peptofr dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 19/12/2006, 17h37
  3. [vbscript] [msgbox] boutons pour ouvrir des fichiers
    Par D-ude dans le forum VBScript
    Réponses: 8
    Dernier message: 12/12/2006, 16h49
  4. [FPDF] Pb pour ouvrir un fichier pdf sous IE ?
    Par wormseric dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/11/2006, 11h15
  5. probleme pour ouvrir un fichier JPG
    Par kokatrix dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 04/05/2006, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo