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 77] Problème de compilation


Sujet :

Fortran

  1. #1
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut [Fortran 77] Problème de compilation
    Bonjour à tous
    Voila j'ai un petit souci, je dois réaliser une interface autour d'un code Fortran et j'en suis maintenant à la compilation; j'utilise pour cela g77.exe de MinGW.
    Pour compiler je fais:
    g77.exe 'nom_de_mon_prog.FOR;10'

    et il m'affiche l'erreur suivante:
    ..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe:\Espace_Privatif_Local
    \draperg\ELEC\PSFOR\PSAOP.FOR;10: file format not recognized; treating as linker
    script
    ..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe:\Espace_Privatif_Local
    \draperg\ELEC\PSFOR\PSAOP.FOR;10:2: syntax error
    collect2: ld returned 1 exit status

  2. #2
    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
    Hmm. Apparemment, g77 ne reconnait pas ton PSAOP.FOR comme etant un code source Fortran (et, etonnament, considere que c'est un script d'edition de lien, drole de defaut).
    Tu es sous VMS ? Sinon, pourquoi as un ;10 apres PSAOP.FOR ?

  3. #3
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Je suis sous windows 2000 Pro.
    Le ;10 représente la version a ce que l'on m'a dit (je ne fais qu'enrober le code).
    Peut-être devrais-je essayer de le copier et de le renommer pour tester?
    Merci de m'aider.

  4. #4
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    En fait je l'ai copié sous l'invite de commande en le renomant en .FOR et ca compile maintenant par contre j'ai des petits soucis de compilation ce qui est bizzare car le programme marche normalement.
    Je ne fais que reprendre des sources pour les enrober.
    Les erreurs suivantes:
    1ere erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    OPEN(UNIT=102,FILE='PSDON.DAT',STATUS='UNKNOWN',shared)
     ^
    Unsupported OPEN control item at (^) --ACTION=,ASSOCIATEVARIABLE=, BLOCKSIZE=,
    2eme erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    C:\PSAOT1.FOR: In subroutine `iv':
    C:\PSAOT1.FOR:253:
               read '(a)',ch$
                            ^
    Invalid form for READ statement at (^)
    3eme erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    C:\PSAOT1.FOR: In subroutine `iv':
    C:\PSAOT1.FOR:253:
               read '(a)',ch$
                            ^
    Invalid form for READ statement at (^)
    Voila si quelqu'un qui s'y connait peut m'aider a debugger cela je le remercie par avance de prendre le temps de m'aider.

  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 Kenji
    Le ;10 représente la version a ce que l'on m'a dit (je ne fais qu'enrober le code).
    Oui, sous VMS (DEC alpha), lorsque tu modifies un fichier, il n'ecrase pas l'ancienne version mais cree un nouveau fichier en incrementant le numero de version ;1 ;2 etc. Sous tout autre systeme, tu dois enlever cette "decoration".

    Pour tes autres erreurs, OPEN en fortran 77 standard n'accepte pas l'option "shared". Je ne sais pas d'ou elle vient (peut-etre est-ce specifique au compilateur VMS).

    Pour les erreurs sur read, le $ est en effet inattendu. J'imagine que c'est un signe que la ligne n'est pas terminee, mais en Fortran 77, il doit etre sur la ligne suivante, a la colonne 5.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          read '(a)', ch
         $   ,<autres lectures>
    Par contre, si c'est du fortran 90, alors c'est bon.

  6. #6
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Oki,merci je vais me plonger dans le code pour modifier ça et voir si ça marche.
    Le fait d'enlever SHARED n'altère pas le code?
    Merci de prendre de ton temps pour m'aider.

  7. #7
    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 Kenji
    Le fait d'enlever SHARED n'altère pas le code?
    J'ai regarde, et SHARED est en fait une extension "admise" de la liste de specificateurs pour OPEN. Je te conseille donc de le garder, et de regarder la documentation de g77 pour voir si OPEN l'accepte. Si oui, alors je ne vois pas l'erreur... Les erreurs que tu as donne sont des erreurs (la compilation echoue) ou des warnings (la compilation reussit tout de meme) ?

  8. #8
    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
    Je viens d'y penser: le signe "$" dans les deux READ n'est pas forcement une continuation de ligne. Il signifie aussi "enlever le retour a la ligne", mais pour un WRITE uniquement. Pour un READ, il n'a au mieux aucun effet, au pire il produit une erreur. Tu peux l'enlever.

  9. #9
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Je mets l'affichage du compilateur en entier ce sera plus (pas forcement digeste par contre )

    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
     
    C:\PSAOT1.FOR: In program `MAIN__':
    C:\PSAOT1.FOR:15:
               OPEN(UNIT=102,FILE='PSDON.DAT',STATUS='UNKNOWN',shared)
               ^
    Unsupported OPEN control item at (^) -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=,
     BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, IN
    ITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONL
    Y=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported
    C:\PSAOT1.FOR: In subroutine `iv':
    C:\PSAOT1.FOR:253:
               read '(a)',ch$
                            ^
    Invalid form for READ statement at (^)
    C:\PSAOT1.FOR: In subroutine `edperf':
    C:\PSAOT1.FOR:514: warning:
            $           ' I ','TEMPERATURE',' I ','  TENSION  ',' I ',
                        ^
    Missing comma in FORMAT statement at (^)
    C:\PSAOT1.FOR: In subroutine `edperfi':
    C:\PSAOT1.FOR:567: warning:
            $           ' I ','TEMPERATURE',' I ','  TENSION  ',' I ',
                        ^
    Missing comma in FORMAT statement at (^)
    bon c est un peu indigeste mais y a tout,je te remercie encore une fois pour ton aide

  10. #10
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Bon,j'ai essayé d'enlever les shared et j'ai laisse les warning,il compile et quand je l'execute il me dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    open: illegal unit number
    apparent state: internal I/O
    lately writing direct unformatted external IO
     
    abnormal program termination
    Si quelqu'un sait d'ou ça peut venir je l'en remercie.

  11. #11
    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 Kenji
    Bon,j'ai essayé d'enlever les shared et j'ai laisse les warning,il compile et quand je l'execute il me dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    open: illegal unit number
    apparent state: internal I/O
    lately writing direct unformatted external IO
     
    abnormal program termination
    Si quelqu'un sait d'ou ça peut venir je l'en remercie.
    Oui, il y a aussi ce problème (ne desespere pas). g77 ne supporte que les numéros d'unité entre 0 et 99. Sous Unix, on peut utiliser des unités plus grandes (même si c'est déconseillé, pour la raison que tu viens de rencontrer).
    Il va donc falloir remplacer ton unit=102 par un numéro plus bas. Ca peut demander pas mal de modifications... Attention, les unités entre 0 et 10 peuvent avoir une signification spéciale (6 est l'entrée standard par exemple).

    Unsupported OPEN control item at (^) -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=,
    BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, IN
    ITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONL
    Y=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported
    Ok, donc shared n'est pas supporté. Il va falloir l'enlever (en essayant de comprendre pourquoi le codeur original l'a mis).

    $ ' I ','TEMPERATURE',' I ',' TENSION ',' I ',
    Le $ indique que cette ligne est la continuité de la ligne précédente. Si cette dernière ne se termine pas par une virgule, il faut la mettre à la fin de la ligne précédente ou au début de cette ligne, peu importe.

  12. #12
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Oki,merci pour les explications,c'est mieux de comprendre par contre maintenant que je comprends je desespere vraiment
    Merci encore d'avoir pris sur ton temps pour me repondre.
    *retourne changer les nombres*
    *cherche le concepteur original si vous l avez pas vu*

  13. #13
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Bon et bien après remplacement des 102 et 106 par des 98 et 99 j' obtiens ceci,j'ai l'impression que c'est a cause du fait que j'ai enlevé le Shared.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    fmt: read unexpected character
    apparent state: unit 99 named PSDON.DAT
    last format: (☻ ☻,5(E12.6,X))
    lately reading sequential formatted external IO
     
    abnormal program termination
    Donc si quelqu'un passe par la et connait la réponse je l'en remercie grandement

  14. #14
    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 Kenji
    Bon et bien après remplacement des 102 et 106 par des 98 et 99 j' obtiens ceci,j'ai l'impression que c'est a cause du fait que j'ai enlevé le Shared.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    fmt: read unexpected character
    apparent state: unit 99 named PSDON.DAT
    last format: (☻ ☻,5(E12.6,X))
    lately reading sequential formatted external IO
     
    abnormal program termination
    La lecture de psdon.dat echoue car le format donne a read ne correspond pas au contenu du fichier. Peux-tu donner la ligne du READ complete, et le format du fichier (nombre de colonnes, format des nombres si c'est du texte, nombre de records, taille d'un record si c'est du binaire) ?

  15. #15
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Alors la ligne incriminée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     READ (99,300) (D((I-1)*5+J),J=1,5)
      300 FORMAT(' ',5(E12.6,X))
    Alors c'est fort possible que ça vienne de la,je m'explique le programme tourne sur un serveur auquel les utilisateurs se connectent via un telnet.
    Pour travailler j'ai tout rappatrié en le convertissant au format ASCII et j' ai rempli PSON.DAT en travaillant sur du texte dessus(mais au départ sur le serveur c'est du binaire les .DAT).
    Le format du fichier:
    1ere ligne:titre
    2eme ligne:date
    matrice: 10 lignes/5 colonnes de données chaque valeur étant codée sous la forme:
    0.#######E+##

    (je sais pas si c'est clair )

    Alors d'après ce que tu me dis je devrais enregistrer les valeurs sous forme de Float dans le fichier et pas de texte?
    Pourtant c 'est la même valeur au niveau ASCII il me semble?
    Merci encore pour ton aide.

    Edit:Je suis en train de potasser de la documentation sur le Fortran et j'ai pu lire au niveau des Formats que pour les formats du type nEl.d on doit avoir l>=d+7 or ici l=12 et d=6 donc 6+7=13>l donc peut être que ça peut venir de la?

  16. #16
    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
    Il faut que tu sois sur que
    - les deux premieres lignes de texte soient lues (genre read(99,*) ligne)
    - tu peux simplifier le format 300 en format(5(E12.6)), il est inutile d'inclure les espaces et le caractere de position (x), a priori.

    Sinon, travailler sur un fichier texte n'est pas un probleme. Cela devrait marcher.

  17. #17
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Je pense que les 2eres lignes sont lues car il y a 2 read avant le read incriminé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    OPEN(UNIT=99,FILE='PSDON.DAT',STATUS='UNKNOWN')
    	READ(99,200) CATA
          READ (99,200) STRNG
      200 FORMAT (' ',A40)
    C      CALL XON
          DO 11 I=1,50
     11   D(I)=0.
          DO 7 I=1,10
          READ (99,300) (D((I-1)*5+J),J=1,5)
      300 FORMAT(' ',5(E12.6,X))
    J'ai essayé avec le nouveau format mais ça ne marche pas non,je me demande vraiment d'ou ça peut venir.
    Peut-être du Shared?
    Merci quand même pour les conseils

    une nouvelle erreur:peut être qu'on avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    fmt: end of file
    apparent state: unit 99 named PSDON.DAT
    last format: (☻ ☻,A40)
    lately reading sequential formatted external IO
     
    abnormal program termination
    J'ai juste rajouté les virgules la où il fallait pour enlever les warnings:étrange

  18. #18
    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
    Ok, si tes donnees sont au format 0.#######E+##, le descripteur est E13.7, pas E12.6.

    J'ai fait un petit programme pour tester avec le fichier toto.txt, qui doit ressembler a tes fichiers d'input:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    First line
    Second line
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    0.1230000E+01 0.2340000E+02 0.3450000E+03 0.4560000E+03 0.5670000E+04
    La lecture se fait bien en utilisant le nouveau format 300:
    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
     
          PROGRAM TOTO
          IMPLICIT NONE
     
          INTEGER I, J
          REAL D(50)
          CHARACTER*40 line1, line2
     
          OPEN(UNIT=99,FILE='toto.txt',status='unknown')
          READ(99, '(a40)') line1
          READ(99, '(a40)') line2
     
          DO I = 1, 50
            D(I) = 0.
          ENDDO
     
          DO I = 1, 10
            READ(99, 300) 
         &     (D((I-1)*5+J), J = 1, 5)
          ENDDO
    300   FORMAT( 5(E13.7, ' ') )
          DO I = 1, 50
            PRINT *, D(I)
          ENDDO
     
          CLOSE(99)
     
          END
    Remarque que tu peux aussi la jouer facile, et faire un READ(99, *) (D( etc.). En regle generale, le Fortran s'en sort bien pour deviner les formats.

  19. #19
    Membre habitué Avatar de Kenji
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    D'abord petite précision:je me suis trompé sur la forme des nombres c'est
    0.######E+## (c'est 6 chiffres et non 7).
    J'ai effectué quelques test avec le Read(99,*) et j'obtiens l'erreur suivante lors de l'execution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    list in: end of file
    apparent state: unit 99 named PSDON.DAT
    last format: list io
    lately reading direct formatted external IO
     
    abnormal program termination
    J'ai regardé le code et j'ai remarqué que le fichier n'etait pas CLOSE,peut-être que ça peut venir de ça aussi.
    J'avoue que je suis de plus en plus perplexe mais merci de faire tous ces tests pour m'aider

  20. #20
    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
    Bizarre. Apparemment, il rencontre la fin du fichier trop tot. Le plus simple est de faire des tests avec mon programme TOTO ci-dessus, en jouant sur le format 300 jusqu'a ce que cela fonctionne. Apres, tu mettras la bonne version dans ton programme principal, en veillant bien a fermer le fichier apres l'avoir lu.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/05/2009, 15h43
  2. [Fortran 77] Problème de compilation avec G77
    Par billybob2 dans le forum Fortran
    Réponses: 1
    Dernier message: 15/06/2007, 08h18
  3. Réponses: 2
    Dernier message: 25/04/2007, 17h44
  4. Réponses: 8
    Dernier message: 01/06/2005, 09h45
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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