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ébutant] Format et compilateur?


Sujet :

Fortran

  1. #1
    Membre régulier Avatar de sylviadesbois
    Inscrit en
    Mars 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 84
    Points : 108
    Points
    108
    Par défaut [débutant] Format et compilateur?
    Bonjour,

    je dois reprendre un code codé par d'autre personnes.

    Dans ce code il y a les lignes suivantes:

    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
     
          OPEN(400,FILE= f, status = 'old', iostat = ierr,err = 282)
     
          READ(400, '(A)', iostat = ierr, err = 1130, end = 282) cbuf
     
          READ(400, '(A)', iostat = ierr, err = 1130, end = 282) cbuf
     
          WRITE(*, '(A)') cbuf
     
            READ(cbuf, 281, iostat = ierr, err = 1130, end = 282)
         +    mm, x, y, qob, qww, hbron, diameter, szopp, ibtg, ibroncat,
         +    iland, namcomp
          GOTO 282
     
    281   FORMAT(i4, 2f8.0, e10.3, f7.3, f6.1, f7.0, f6.1, 3i4, 2X, a)
     
    1130  CONTINUE                                              ! file error
     
          WRITE(*, '(/, A)') 'I/0 ERROR.'
     
    282   end
    Et cela fonctionne sur mon ordinateur avec mon compilateur.

    Pour les besoins de mon projet d'étude je dois l'envoyer à un autre developpeur, dans un autre laboratoire.
    Le code ne fonctionne alors pas chez lui, il obtiens l'erreur suivante:
    'I/0 ERROR.'

    Qui correspond à l'erreur de récupération des données (j'en suis certaine car l'affichage de cbuf se fait).

    Si je regarde cbuf il a la forme suivante:

    1,100013,400088,0.000E+00,0.0,0.0,0.0,0.0,0,81,1,0,NH3

    J'ai donc du mal à comprendre comment mon executable arrive à le lire cela ne correspond pas du tout au format...
    Pourtant il récupère quand même les bonnes données en découpant cbuf selon les ','

    Je pense donc que chez moi les ',' sont regardés en priorités avant les formats et que ce n'est pas le cas chez mon collègue.

    Est-ce que j'ai bien deviné ou bien est-ce que le problème vient d'autre chose?

    Et si l'hypothèse est vrai comment alors faire en sorte que chez mon collègue le découpage se fasse en priorités sur les virgules?

    Je rapelle que j'ai un niveau débutant en F77 et que le code n'est pas de moi.

    Merci.

  2. #2
    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
    Points : 1 346
    Points
    1 346
    Par défaut
    Présentement, lorsqu'une erreur est observée, le contrôle est retourné à ton programme (à cause des iostat et err) et tout ce que ton programme fait, c'est d'afficher 'I/0 ERROR.'. En fait de message informatif, on a déjà vu mieux...

    Ma suggestion : enlève, du moins temporairement, les iostat= et les err= de tes open et read. Lorsqu'il y aura erreur, la librairie génèrera un message décrivant le problème.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 63
    Points
    63
    Par défaut
    Une autre solution consisterai à remplacer toutes les virgules de cbuf par des espaces puis de faire une lecture simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
           do k=1,len(cbuf)
                if (cbuf[k] == ',') cbuf[k] = ' '
           end do
     
           read(cbuf,*)
         +    mm, x, y, qob, qww, hbron, diameter, szopp, ibtg, ibroncat,
         +    iland, namcomp
    (je n'ai pas testé la proposition)

  4. #4
    Membre régulier Avatar de sylviadesbois
    Inscrit en
    Mars 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 84
    Points : 108
    Points
    108
    Par défaut Merci
    Merci pour votre réponse,
    Je ne peux pas la tester maintenant mais je vous tiendrais au courant.
    Merci.

  5. #5
    Membre régulier Avatar de sylviadesbois
    Inscrit en
    Mars 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 84
    Points : 108
    Points
    108
    Par défaut Merci !
    Bonjour, merci pour vos réponses.


    @mipicard votre solution a fonctionné.

    @ Sylvain Bergeron: J'ai bien pris votre remarque en compte, je garde cela en tête pour mes prochains codes (celui là n'était pas de moi mais cela n'excuse pas tout).

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/12/2008, 16h16
  2. [Débutant] Formats de date
    Par Jhulk dans le forum C#
    Réponses: 4
    Dernier message: 13/05/2008, 14h01
  3. [Débutant] Format Date
    Par 19cmos83 dans le forum VB.NET
    Réponses: 4
    Dernier message: 29/11/2007, 17h30
  4. Réponses: 7
    Dernier message: 17/04/2007, 22h31
  5. [Débutant] formater une chaine variable.
    Par SirDarken dans le forum Langage
    Réponses: 4
    Dernier message: 13/09/2006, 02h35

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