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 :

Déclaration d'un format de lecture


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 19
    Points : 22
    Points
    22
    Par défaut Déclaration d'un format de lecture
    Bonjour,
    1ère Question simple : peut-on déclarer un format ?

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    100 format (f14.8, A, f148)
    Je suis en train de lire un fichier : j'ai 17 valeurs à la suite que je dois lire.
    (C'est un fichier ASCII). Du coup, je pensais faire un read avec ce format mais comme le format risque d'être long, j'ai pensé le déclarer.

    2ème Question :
    Sachant que le fichier est écrit ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    12.3456 12.9876
    12.1212 13.5467
    Suis-je obligé de séparer les espaces par un format A ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    read(u_file, 100, iostat = ok) x, " ", y

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Ta question me semble posée de manière assez contradictoire:
    j'ai 17 valeurs à la suite
    mais tu sembles avoir seulement 2 valeurs par ligne; cela signifie-t-il que ton fichier comporte 9 lignes? Ou bien, comme le laisse supposer ton code à la fin, tu as non pas 17 valeurs, mais 17 paires de valeurs.
    Avant donc que d'écrire, apprenez à penser.

    Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément.

    Nicolas Boileau (1636-1711)
    S'il s'agit de 17 valeurs, le plus simple est d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          Implicit None
          Integer I
          Real*8 X(17)
     
          Read(u_file,'(2F8.3)') (X(I),I=1,17)
    Si, au contraire, il s'agit de 17 paires de valeurs, ce sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          Implicit None
          Integer I
          Real*8 X(17),Y(17)
     
          Do I=1,17
            Read(u_file,'(2F8.3)') X(I),Y(I)
          End Do
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 19
    Points : 22
    Points
    22
    Par défaut
    J'aurai dû ajouter dans mon sujet que les deux questions étaient indépendantes.
    Enfin, si elles sont dépendantes, mais je préfère simplifier au maximum mes questions pour avoir une réponse ciblée.
    Je m'occuperai ainsi du reste tout en étant sûr des points sensibles
    Désolé pour la simplification !
    Mon fichier est construit de cette manière :
    n lignes et 17 colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    12.3456 12.3456 12.3456 12.3456 12.3456 12.3456 12.3456
    78.9012 78.9012 78.9012 78.9012 78.9012 78.9012 78.9012 
    ...
    Donc, selon votre méthode, cela serait plutôt un mixte des deux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          Implicit None
          Integer I
          Integer nbre_ligne ! Récupérée auparavant
          Real*8 A(nbre_ligne),B(nbre_ligne),C(nbre_ligne),D(nbre_ligne), !etc....
     
          Do I=1,nbre_ligne
            Read(u_file,'(17F8.3)') A(I),B(I),C(I),D(I) ! etc ...
          End Do
    Je me demande juste comment le compilateur va lire le fichier ...

  4. #4
    Membre régulier
    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
    Points : 89
    Points
    89
    Par défaut Lecture format
    Tout d'abord le bout de programme devrait a priori fonctionner.
    Si tu connais déjà la dimension du tableau que tu veux stocker en mémoire une solution plus efficace serait de déclarer un objet A de dimension (nlignes, 17), ce sera moins fastidieux à coder et plus simple à maintenir.

    Ensuite, concernant ta dernière question, il faut avant tout que tu nous dises si le fichier que tu veux lire est au format fixe ou pas.
    S'il est au format fixe (ce qui semble suggéré par ton exemple), l'instruction va lire ton fichier par blocs de 8 caractères dont 3 caractères seront présents après la virgule.
    Cf p37 de ce cours

    Donc sur ton exemple, la lecture au format F8.3 devrait te poser problème.

  5. #5
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par latex_man Voir le message
    Je me demande juste comment le compilateur va lire le fichier ...
    Attention au vocabulaire. Le compilateur ne lit pas le fichier. Le fichier est lu lors de l'execution de ton programme.

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 19
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par yogitetradim Voir le message
    Tout d'abord le bout de programme devrait a priori fonctionner.
    Si tu connais déjà la dimension du tableau que tu veux stocker en mémoire une solution plus efficace serait de déclarer un objet A de dimension (nlignes, 17), ce sera moins fastidieux à coder et plus simple à maintenir.
    Oui effectivement, c'est ce que j'ai ajouté dans mon post précédant.

    Ensuite, concernant ta dernière question, il faut avant tout que tu nous dises si le fichier que tu veux lire est au format fixe ou pas.
    Je viens de découvrir que le fichier n'était pas au format fixe, du coup, j'ai essayé de lire tout ça en mode read(u_file,*,iostat=ok).
    Et ce sont les variables bien déclarées qui m'ont permis de m'en sortir.

    Le problème s'est arrangé.
    Merci beaucoup pour votre aide et votre disponibilité , restez dans les environs ... Le Fortran cache encore quelques uns de ses secrets ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Format de lecture dépendant d'une variable
    Par stainer dans le forum Fortran
    Réponses: 7
    Dernier message: 06/06/2014, 22h33
  2. Problème de format et lecture fortran77
    Par sahroura dans le forum Fortran
    Réponses: 8
    Dernier message: 04/04/2012, 18h11
  3. format de lecture d'un socket udp
    Par fennec62 dans le forum Langage
    Réponses: 6
    Dernier message: 24/11/2008, 23h13
  4. Déclaration constante au format binaire sous D7
    Par DavidDB dans le forum Débuter
    Réponses: 2
    Dernier message: 07/07/2008, 22h20

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