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 :

Problème de format et lecture fortran77


Sujet :

Fortran

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Problème de format et lecture fortran77
    Bonjour,
    je travaille avec fortran, j'essaye de lire des données, je lis une chaîne de caractère et ensuite un réel.
    Format(42a,1F5.1)
    Le problème il me lis une chaîne de caractère mais le réel j’en ai besoin pour faire des calcul il m’affiche à l’encrant des valeurs incorrecte et quant j’affiche avec le format (‘1F5.1’) il m’affiche les bonne valeurs. Je ne sais pas comment faire cars j’ai besoin des ses valeurs réel pour faire mes calcul.
    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Points : 128
    Points
    128
    Par défaut
    Bonjour,
    je n'ai vraiment pas compris. Apparement c'est un problème de format de lecture, mais il faudrait que tu donnes un exemple plus précis.
    Tu pourrais aussi relire un minimum ton message avant de poster : "écran" est devenu "encrant" ...

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Désolé de ne pas être précise. Je lis des lignes de données, la ligne contient une chaîne de caractère de 42 caractères et un réel. Donc j’utilise le format (format(40a,1f5.1)) pour lire ces données.
    64 format(42a,1F5.1)
    read(13,64,end=1001) chaine2, p
    write(6,'(1f5.1)')p
    print*,p

    il affiche:
    0.0
    1.49230620E-19

    Je ne comprend pas pourquoi il me donne la vrais valeur du réel quant je l’affiche avec le format, mais il me donne une valeur quelconque quant je l’affiche tout simplement et il utilise cette valeur fausse pour les calcul et j’ai des résultats faux.
    Merci

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Points : 128
    Points
    128
    Par défaut
    Bonjour,
    La différence d'affichage est normale, lorsque tu utilises le format *, le compilateur détermine automatiquement le format le mieux adapté à la variable à afficher. Tu obtiens alors 1.49230620E-19, mais en imposant le format de sortie (f5.1), tu demandes d'afficher ce même réel en format non scientifique sur 5 caractères avec 1 chiffre après la virgule. Ce qui donne forcément 0.0

    Peux-tu poster le ligne du fichier à lire ?
    Il est fort probable que le format de lecture ne soit pas bon. Si la chaine de caractère avant le réel ne contient pas de caractère "espace", tu peux simplement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    read(13,*,end=1001) chaine2, p
    write(6,*) chaine2
    write(6,*) p

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    2010 12 16 00 00 00 2010 12 16 00 05 00 0.0

    C’est la ligne à lire en faite la chaîne de caractère est la date, ensuite j’ai le réel, ici 0.0

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Points : 128
    Points
    128
    Par défaut
    Ok, je te propose un truc plus simple : lire toute la ligne en tant que chaine de caractère, éliminer les 42 premiers caractères (sauf que sur ton exemple j'en vois 39) et ensuite mettre le reste dans ta variable p. Ca donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    character*100 :: chaine  ! La longueur est volontairement longue
     
    read(13,'(A100)') chaine
    chaine = chaine(43:)
    read(chaine,*) p
     
    write(*,*) p

  7. #7
    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!
    Comment as-tu déclaré la variable Chaine2 ?
    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)

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses

    La déclaration de chaine2:

    character*42 chaine2

  9. #9
    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!
    Essaie d'écrire
    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)

Discussions similaires

  1. lecture fichier : problème de format unicode?
    Par olivier1209 dans le forum VBScript
    Réponses: 3
    Dernier message: 19/02/2013, 22h58
  2. lecture xml : problème de format
    Par bebert3 dans le forum Flex
    Réponses: 1
    Dernier message: 11/03/2010, 14h09
  3. Réponses: 14
    Dernier message: 06/08/2004, 15h12
  4. [CR8] Problème de Format d'affichage
    Par khabch dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 19/02/2004, 14h10
  5. Problème de Format de date
    Par titititi007 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/06/2003, 08h19

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