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 :

lecture de plusieurs paramètres, fortran 77


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Par défaut lecture de plusieurs paramètres, fortran 77
    Bonjour à tous,

    je suis débutant en programmation et je me retrouve avec un programme en fortran 77, qui m'a été fourni. En fait j'ai 2 fichiers: un premier contenant mon programme et un second contenant mes données.
    Pour décrire un peu, mon fichier données contient une première ligne de descriptif, une seconde avec différents paramètres et plus d'une centaine contenant les données.
    Mon problème se situe au niveau de la lecture de la seconde ligne, à travers mon programme. Le programme ne reconnait pas les différents paramètres et n'arrivent pas à les lire.

    Je ne sais pas si j'explique bien et je vais prendre un exemple:

    Voici mon fichier de données:

    Pau 31 Mai 1986
    -81.16 52.30 160 5
    -90.60 53.20 6
    -80.20 45.95 6
    -79.62 65.50 6
    ...etc..

    Je veux lire la seconde ligne contenant les paramètres, donc après description des variables, input, output, constantes ... je lis la première ligne:

    read(iunit,'(a)') eqid

    jusque là ça marche, mais ensuite le problème arrive. Je veux lire les 4 paramètres de la seconde ligne et que je veux appeler xlon, xlat, spread et del:

    read(iunit,*) xlon, xlat, spread, del

    et là ça plante.

    Je n'arrive pas à trouver d'informations concernant la prise en compte de plusieurs paramètres avec la fonction read et je ne comprends pourquoi ça ne fonctionne pas. Le programme sait-il que je fais référence à cette ligne là?

    Ce programme m'a été fourni par quelqu'un de très sérieux, m'ayant certifié qu'il fonctionnait parfaitement.

    Merci pour toutes informations ou conseils que vous pouvez me donner

  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 : 84
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          read (iunit,'(2F6.2,I4,I2)') xlon,xlat,spread,del
    Jean-Marc Blanc

  3. #3
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Bonjour

    A ce qu'a écrit Jean-Marc, j'ajouterais :

    As-tu bien déclaré tes variables xlon et xlat réelles et spread et del entières ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Par défaut
    j'ai bien déclaré les variables comme entiers et réels. J'ai changé le format comme proposé par Jean-Marc, mais ça ne marche toujours pas. J'ai aussi changé le nom de la variable spread car c'est le nom d'une fonction fortran.

    Petite question supplémentaire: j'utilise la ligne print '(2a)', 'marche' pour savoir à quelle ligne mon programme s'arrête. Est ce une bonne solution? Ça a fonctionné jusqu'à cette ligne

    merci pour votre aide

  5. #5
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Peux-tu nous poster ton programme (entre balises pour faciliter la lecture) ?

    S'il est trop long (> 50-60 lignes), poste juste le début.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Par défaut
    Voici le début du programme
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
          program pro
          real x,y
          parameter (ndatdim=3000)
          parameter (ndim=161)
          character*28 eqid,infile,outfile
          real zlat(ndatdim), zlon(ndatdim),  zmmi(ndatdim)
          real xlat(ndatdim), xlon(ndatdim),  xmmi(ndatdim)
          real wts(ndatdim)
          real xloneq, xlateq
          integer sprd, dellat
    c  xlat(i), xlon(i) are the coords for intensity xmmi(i) 
          real  xmii3(ndatdim),r3(26500), s3(26500)
          real  glat(26500),glon(26500)
    c  xmii1, xmii3, xmii4 are scratch arrays
          integer iunit,ounit1,ounit2
          parameter (iunit=21, ounit1=22, ounit2=23)
          pio180=4.0*atan(1.0)/180.
          Distmax=150.
    c Open infile...
     1    print '(a,$)', ' Infile:  '
          read '(a)', infile
          open (iunit, file=infile, form='formatted', status='old',
         &iostat=ios)
          if (ios.ne.0) then
             print *, ' Something wrong with infile = ', infile
             print *, ' ** Try again**'
            go to 1
          endif
     
    c     Open output files...
        2 print '(a,$)', ' Outfile for MI3:  '
          read '(a)', outfile
          open (ounit1, file=outfile, form='formatted', status='new', 
         &  iostat=ios)
          if (ios.ne.0) then
             print *, ' Something wrong with outfile = ', outfile
             print *, ' ** Try again **'
            goto 2
          endif
        3 print '(a,$)', ' Outfile for RI3:  '
          read '(a)', outfile
          open (ounit2, file=outfile, form='formatted', status='new', 
         &  iostat=ios)
          if (ios.ne.0) then
             print *, ' Something wrong with outfile = ', outfile
             print *, ' ** Try again **'
            goto 3
          endif
     
    c     Read header information.
          read(iunit,'(a)') eqid
     
    c     Print header info at terminal:
          print '(2a)', ' id = ', eqid
     
    c     Write header to outfile.
          write(ounit1,'(a)') eqid
          eqid(21:28)='RMS MI-3'
          write(ounit2,'(a)') eqid
          read (iunit,'(2F6.2)',I4,I2)  xloneq, xlateq,sprd,dellat
          print '(2a)', 'marche'
     
          write(ounit1,'(1x,4f10.2)') xloneq,xlateq,sprd,dellat
          write(ounit2,'(1x,4f10.2)') xloneq,xlateq,sprd,dellat
    et le début du fichier de données

    Pau 31 Jan 1986
    -81.16 41.65 160 5
    -81.35 41.4 6
    -83.65 41.37 6
    -81.14 41.61 6
    -80.94 41.8 6
    -81.28 41.73 6
    -81.05 41.53 6
    -81.36 41.62 6
    -81.14 41.68 6
    -81.06 41.78 6
    -81.35 41.66 6
    -81.28 41.43 6
    -81.07 41.46 6
    -81.26 41.73 6

Discussions similaires

  1. Fonction qui retourne plusieurs paramètres
    Par diam's dans le forum Langage
    Réponses: 3
    Dernier message: 03/02/2006, 20h11
  2. lecture de plusieurs port en même temps
    Par manaboko dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2005, 15h26
  3. Réponses: 2
    Dernier message: 12/09/2005, 15h33
  4. Réponses: 4
    Dernier message: 19/04/2005, 13h42
  5. Réponses: 2
    Dernier message: 15/06/2004, 11h22

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