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] Lecture d'une matrice dans un fichier texte


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut [Fortran 77] Lecture d'une matrice dans un fichier texte
    Salut
    J'ai encore un petit souci... j'apprend comment fonctionne les fichiers. Donc, j'essaye de lire une matirce qui existe au préalable dans un fichier .txt. Pour faire simple, je me suis mis une matrice 2*2.

    Je me retrouve avec le message d'erreur suivant lors de la compilation:

    fmt: end of file
    apparent state: unit 24 named systeme.txt
    last format: <F3.1,1X,F3.1>
    lately reading sequential formatted external IO


    a mon avis il y a un problème avec mon fichier texte concernant le caractère fin de fichier. mais je ne sais pas qoui. Mon FORMAT a l'air de bien marcher.

    Si c'est un truc tout bête ne me dites pas la réponse tout de suite, juste un indice peut être?




    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
     
         PROGRAM LECTUREMAT
          IMPLICIT NONE
          INTEGER n
          PARAMETER(n=2)
          INTEGER i,j
          REAL*8 T(n,n)
     
     
          OPEN( 24, FILE='systeme.txt', FORM='FORMATTED', STATUS='UNKNOWN')
     
          Do i=1,n
            Read(24,45)( T(i,j) , j=1,n,1 )
          End Do
     
    45   FORMAT(F3.1,1X,F3.1)
     
          CALL afimat(T,n)                     
          CLOSE(24)
          STOP
          END
    une subroutine pour afficher la matrice dans le console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          SUBROUTINE afimat(M, dim)
          INTEGER dim
          REAl*8 M(dim,dim)
          DO i=1,dim
            write(*,*) (M(i,j), j=1, dim)
          ENDDO
          RETURN
          END
    Ce qu'il y a dans mon fichier "systeme.txt" (j'ai inclus un saut de ligne à la fin après le dernier élément, 5.5):

    Merci d'avance! (C'est fortran 77 que j'utilise)

  2. #2
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    c est illogique de mettre implicit none dans ta sousroutine et pas dans le program!, il faut mettre implicit none partout ou pas


    Citation Envoyé par hammah Voir le message
    Salut
    J'ai encore un petit souci... j'apprend comment fonctionne les fichiers. Donc, j'essaye de lire une matirce qui existe au préalable dans un fichier .txt. Pour faire simple, je me suis mis une matrice 2*2.

    Je me retrouve avec le message d'erreur suivant lors de la compilation:

    fmt: end of file
    apparent state: unit 24 named systeme.txt
    last format: <F3.1,1X,F3.1>
    lately reading sequential formatted external IO


    a mon avis il y a un problème avec mon fichier texte concernant le caractère fin de fichier. mais je ne sais pas qoui. Mon FORMAT a l'air de bien marcher.

    Si c'est un truc tout bête ne me dites pas la réponse tout de suite, juste un indice peut être?




    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
     
         PROGRAM LECTUREMAT
          IMPLICIT NONE
          INTEGER n
          PARAMETER(n=2)
          INTEGER i,j
          REAL*8 T(n,n)
     
     
          OPEN( 24, FILE='systeme.txt', FORM='FORMATTED', STATUS='UNKNOWN')
     
          Do i=1,n
            Read(24,45)( T(i,j) , j=1,n,1 )
          End Do
     
    45   FORMAT(F3.1,1X,F3.1)
     
          CALL afimat(T,n)                     
          CLOSE(24)
          STOP
          END
    une subroutine pour afficher la matrice dans le console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          SUBROUTINE afimat(M, dim)
          INTEGER dim
          REAl*8 M(dim,dim)
          DO i=1,dim
            write(*,*) (M(i,j), j=1, dim)
          ENDDO
          RETURN
          END
    Ce qu'il y a dans mon fichier "systeme.txt" (j'ai inclus un saut de ligne à la fin après le dernier élément, 5.5):

    Merci d'avance! (C'est fortran 77 que j'utilise)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    J'ai ajouté IMPLICIT NONE partout, mais l'erreur y est toujours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    d'ailleurs, j'ai résolu des erreurs dans ma sousroutine:
    SUBROUTINE afimat(M, dim)
          INTEGER i,j,dim
          REAl*8 M(dim,dim)
          DO i=1,dim
            write(*,*) (M(i,j), j=1, dim)
          ENDDO
          RETURN
          END

    j'ai toujours le même message d'erreur

  4. #4
    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
    ne me dites pas la réponse tout de suite, juste un indice peut être
    Tiens! Un débutant qui semble avoir vraiment envie d'apprendre.

    Alors, tu dois apprendre à chercher les erreurs dans tes programmes et je vais essayer de te guider:

    Il y a tout d'abord une chose qui m'étonne: es-tu bien sur que le message d'erreur vient à la compilation et non à l'exécution ?

    D'autre part, essaie de mettre un Write de tes valeurs immédiatement après le Read dans ta boucle, pour voir si la première ligne est lue correctement.

    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)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    pour te répondre FR119492, le message d'erreur s'affichait bien lors de l'exécution, et non pas lors de la compilation, comme je l'ai cité.

    J'ai trouvé le problème. En fait mon fichier systeme.txt était vide lors de la lecture. Du coup, on se trouvait directement sur le end of file, d'où le message d'erreur.

    Je confondait avec un autre fichier du même ùnom, systeme.txt, qui se trouvait dans un autre répertoire, et qui lui contenait bien ma matrice!

    Morale de l'histoire: faire gaffe lorsqu'on nomme ses fichiers et bien s'organiser dans les répertoires, dossiers etc.
    C'est fou, de se rendre compte que l'erreur n'a rien à voir avec la programmation, mais provient de sa maladresse!

    Merci

  6. #6
    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
    Sans vouloir te décourager, je te signale qu'on fait encore ce genre d'erreurs après 45 ans de programmation.
    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)

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

Discussions similaires

  1. Ecrire une matrice dans un fichier texte
    Par tiouba dans le forum MATLAB
    Réponses: 5
    Dernier message: 20/04/2012, 14h26
  2. Lire une matrice dans un fichier texte
    Par sfiliste dans le forum Fortran
    Réponses: 3
    Dernier message: 09/09/2010, 15h57
  3. ecrire une matrice dans un fichier text
    Par sharrky dans le forum MATLAB
    Réponses: 7
    Dernier message: 07/08/2009, 15h46
  4. Sauvegarde d'une matrice dans un fichier text
    Par Christinita dans le forum MATLAB
    Réponses: 5
    Dernier message: 01/12/2008, 10h27
  5. Réponses: 1
    Dernier message: 26/09/2007, 19h55

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