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 fichier en entrée


Sujet :

Fortran

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 99
    Points : 77
    Points
    77
    Par défaut Lecture de fichier en entrée
    Bonjour,

    la question est sans doute trivial (quoique) mais je suis bloqué depuis un petit moment sans trouver de solution à mon problème...

    J'ai un code qui génère un fichier de sortie a.dat, ce fichier s'organise sous forme de trois colonnes de réels x y &.
    Je souhaite organiser ces données sous une autre forme dans un second fichier. Pour ne pas relancer le programme (convergence de l'ordre de la semaine), j'aimerai lire uniquement la troisième colonne de mon premier fichier à partir d'un second programme.

    J'ai essayé avec le programme suivant mais par défaut je récupère la première colonne de mon fichier a.out.

    Quelqu'un aurait-il une idée de l'option à ajouter ?
    Merci par avance,
    Yann.

    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
            PROGRAM main
     
            IMPLICIT NONE 
     
            INTEGER   (KIND=4) :: i,j 
            REAL      (KIND=8),DIMENSION(100,100) :: mat
     
    !Ouverture du fichier de entre & sortie
            OPEN(unit=1,file='a.dat')
            OPEN(unit=2,file='abis.dat')
     
    !Lecture fichier entre
            DO i=1,100
                    DO j=1,100
                            READ(1,*) mat(i,j)
                    ENDDO
            ENDDO
     
    !Reecriture sous forme d une matrice dans fichier de sortie
            DO i=1,100
                    DO j=1,100
                            WRITE(2,*) mat(i,j)
                    ENDDO
            ENDDO
     
            CLOSE(1)
            CLOSE(2)
     
            END PROGRAM main

  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
    Le problème est simplement qu'en faisant :
    • READ(1,*) mat(i,j)

    tu demande à ton programme de lire un réel à chaque ligne. Ton programme lit donc le premier nombre qu'il trouve. Tu devras lire 3 variables à chaque ligne et n'utiliser que la 3ième valeur pour obtenir le résultat désiré.

    Autres commentaires et suggestions :
    • Il est préférable d'utiliser des units > 10, et non 1 et 2. C'est une bonne habitude et développer; certains compilateurs utilisent ces units par défaut pour les stdin, stdout et stderr.
    • Si tu écrivais dans le fichier de sortie dès la lecture de chaque ligne, tu pourrais éviter le besoin d'un tableau et avoir un programme beaucoup plus simple.


    Le programme suivant fait ce que tu veux je crois, mais en bien plus simple :
    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
     
    program main
     
       implicit none 
     
       integer :: i,j 
       real (kind=8) :: x,y,z
     
    !Ouverture du fichier de entre & sortie
       open(unit=11,file='a.dat')
       open(unit=12,file='abis.dat')
     
    !Lecture / écriture
       do i=1,100
          do j=1,100
             read(11,*) x,y,z
             write(12,*) z
          enddo
       enddo
       end program main

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    Salut,

    un double remerciement !
    Le premier pour la méthode, le second pour les conseils.
    J'ai en effet déjà rencontré des problèmes avec des unit > 5 sans bien savoir d'o`u cela provenait sans toutefois creuser ayant rarement plus de 5 fichiers de sortie !

    Merci un grand merci à toi.

    Yann.

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

Discussions similaires

  1. Lecture de fichier audio entre MATLAB et C
    Par fatenov dans le forum MATLAB
    Réponses: 5
    Dernier message: 25/02/2008, 10h49
  2. Réponses: 2
    Dernier message: 25/10/2007, 13h56
  3. Lecture standard et communication entre processus!
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/07/2003, 16h37
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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