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 :

Problème d'écriture dans un fichier


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Par défaut Problème d'écriture dans un fichier
    Bonjour,


    J'ai des fichiers , exemple: maps000001, maps000002:


    maps000001:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     0.0000000E+00   0.9000000E+02  -0.3228331E+5
      0.0000000E+00   0.8800000E+02  -0.1468246E-14
      0.0000000E+00   0.8600000E+02   0.1261635E-12
      0.0000000E+00   0.8400000E+02   0.3256342E-14
      0.0000000E+00   0.8200000E+02   0.3353514E-15
      0.0000000E+00   0.8000000E+02   0.1879126E-1
      0.0000000E+00   0.7800000E+02   0.2759277E+15
      0.0000000E+00   0.7600000E+02  -0.2333509E-13
      0.0000000E+00   0.7400000E+02   0.2687527E-15
      0.0000000E+00   0.7200000E+02   0.5729601E-15
    maps000002
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    0.0000000E+00   0.9000000E+02  -0.3228331E+1
      0.0000000E+00   0.8800000E+02  -0.1468246E-12
      0.0000000E+00   0.8600000E+02   0.1261635E-5
      0.0000000E+00   0.8400000E+02   0.3256342E+2
      0.0000000E+00   0.8200000E+02   0.3353514E-15
      0.0000000E+00   0.8000000E+02   0.1879126E-1
      0.0000000E+00   0.7800000E+02   0.2759277E-15
      0.0000000E+00   0.7600000E+02  -0.2333509E-13
      0.0000000E+00   0.7400000E+02   0.2687527E-15
      0.0000000E+00   0.7200000E+02   0.5729601E-15
    J'ai calcule des valeurs maximum du troisieme colum des fichier maps. J'arrive a imprime sur l'ecran.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    maximum du fichier1: 0.0000000E+00   0.9000000E+02  -0.3228331E+5
    maximum du fichier 2 : 0.0000000E+00   0.8400000E+02   0.3256342E+2
    Je voudrai ecrire dans un fichier maps_max comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    maps_max:
    1   0.0000000E+00   0.9000000E+02  -0.3228331E+5
     2   0.0000000E+00   0.8400000E+02   0.3256342E+2
    Mais les resultats (de mon conde) sont ecrit seulement la valeurs maximum de dernier fichier (c'est a dire fichier maps000002, n = nmax).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    maps_max:
        2  0.0000000E+00   0.8400000E+02   0.3256342E+2
    Voici le code j'ai ecrit

    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
    65
    66
    67
    68
    69
    70
    71
     
    program maxxi_map
      implicit none
     
    ! Declaration
      character(len=4)      :: map="maps"
      character(len=9)      :: some_maps
      character(len=2)      :: nd
      character(len=6)      :: nf
      character(len=2)      :: Fa="a_"
      character(len=9)      :: map_sorti="map_stack"
      character(len=8)      :: maps_max
      integer               :: i,j,k,nmax,ncol,nlign, n, m,ll
      real, allocatable     :: l1(:),l2(:),l3(:), l4(:),latn(:),longn(:)
      real                  :: tr,maxxi,lat,long
     
      print*,"enter value of maps nmax"
      read*,nmax
    ! arrays' size with the first file
     nlign = 0
    !
    open(10,file="maps000001",status="old",action="read")
     do
       read(10,*,end=40) tr,tr,tr
       nlign = nlign+1
      end do
    40  close(10)
    write(*,*) nlign," lines read"
     
    ! allocations
     allocate(l1(nlign),l2(nlign),l3(nlign),l4(nlign))
     
     
    !! boucle
             do n=1,nmax
     
               write(nf,"(i6.6)")n
                     open(10, file="maps"//nf,status="old",action="read")
                           do j = 1,nlign
                           read(10,*) l1(j),l2(j),l3(j)
                              l4(j) = abs (l3(j))
                           end do
                         maxxi = l4(1)
                         do i=1,nlign
                               if ( l4(i) .gt. maxxi)  then
                                    maxxi = l4(i)
                                    lat = l1(i)
                                    long = l2(i)
                               else
                                    maxxi = maxxi
                                    lat = l1(i)
                                    long = l2(i)
                               endif
                        enddo
                     do k = 1,nlign
                          if ( l4(k) .eq. maxxi)  then
                               lat = l1(k)
                               long = l2(k)
                          endif
                       enddo
                        print*,'maximum of maps number ',n,lat,long,maxxi
                          open(20,file="maps_max",action="write",status="replace")
                          write(20,"(i2.2,1x,e14.7,1x,e14.7,1xe14.7)"),n,lat,long,maxxi
                 close(10)
                          close(20)
              end do
     
    ! Deallocations
    deallocate(l1,l2,l3,l4)
     
    end program maxxi_map
    Est-ce qu'il y a quelqu'un qui connait ou a autre solution a resoudre ce probleme

    Merci votre aide,

    Chip.

  2. #2
    Membre émérite
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Par défaut
    Ton open(20,..) n'est pas au bon endroit.

    Chaque fois que tu ouvre le fichier tu commences à lire (ou écrire) à la première ligne. Donc à chaque itération tu écris par dessus l'itération d'avant !

    Soit tu places le open à l'extérieur de la boucle (ce que je trouve être la meilleure solution) soit tu rajoutes position="append" dans le open pour ouvrir le fichier en se plaçant sur la dernière ligne !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 12
    Par défaut Ca marche pas
    Citation Envoyé par Ladgalen Voir le message
    Ton open(20,..) n'est pas au bon endroit.

    Chaque fois que tu ouvre le fichier tu commences à lire (ou écrire) à la première ligne. Donc à chaque itération tu écris par dessus l'itération d'avant !

    Soit tu places le open à l'extérieur de la boucle (ce que je trouve être la meilleure solution) soit tu rajoutes position="append" dans le open pour ouvrir le fichier en se plaçant sur la dernière ligne !

    Merci de ton eiseignement.
    J'ai essaye tous les deux cas. malheuresement, ce la ne marche pas.

    J'ai deplace open à l'extérieur de la boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    open(20,file="maps_max",action="write",status="replace")
                          do n = 1,nmax
                          write(20,"(i2.2,1x,e14.7,1x,e14.7,1xe14.7)"),n,lat,long,maxxi      
                           enddo 
                       close(20)
    les resultats dans fichier maps_max:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    maps_max:
    01  0.0000000E+00  0.8400000E+02  0.3256342E+02
    02  0.0000000E+00  0.8400000E+02  0.3256342E+02
    si j'ai mis selement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     open(20,file="maps_max",action="write",status="replace")
     write(20,"(i2.2,1x,e14.7,1x,e14.7,1xe14.7)"),lat,long,maxxi
     close(20)
    à l'extérieur de la boucle

    J'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    maps_max:
     
     00  0.8400000E+02  0.3256342E+02
    Merci par avance,

    Chip

Discussions similaires

  1. problème d'écriture dans un fichier
    Par cartonol dans le forum Oracle
    Réponses: 12
    Dernier message: 17/08/2006, 17h08
  2. [FTP] problème d'écriture dans un fichier
    Par oops! dans le forum Langage
    Réponses: 14
    Dernier message: 08/08/2006, 16h52
  3. problème d'écriture dans un fichier
    Par seurjer dans le forum Langage
    Réponses: 8
    Dernier message: 01/06/2006, 09h15
  4. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  5. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28

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