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 :

aide fortran lecture de 2 fichiers puis ecriture dans un nouveau fichier


Sujet :

Fortran

  1. #1
    Invité
    Invité(e)
    Par défaut aide fortran lecture de 2 fichiers puis ecriture dans un nouveau fichier
    Bonjour,
    j'ai besoin de votre aide dans le cadre d'un stage en modelisation...
    Je dispose de 2 fichiers:
    1) O3_summer.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AT60190 46.6519 15.3678 bac rur
    AT30202 48.1061 15.9194 bac rur
    FR04101 48.8164 2.5175 bac urb
    FR23172 47.2731 -1.43306 bac sub .....
    Il contient 1331 lignes
    AT30202 correspond au code d'une station, "46.6519" à la longitude, "15.3678" à la latitude, "bac" au type de station et "rur","sub" ou "urb" à la 5eme colonne correspond à la localisation d'une station. C'est ce dernier élément qui m'interesse...

    2) comparaisons.dat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    AT0PIL1          -0.286423E+01   0.190922E+02   0.789038E+02   0.817680E+02   0.221314E+02   0.248293E+02   0.374993E+03   0.682417E+00
    AT0SON1          -0.776765E+01   0.204891E+02   0.995232E+02   0.107291E+03   0.161050E+02   0.145738E+02   0.561506E+02   0.239231E+00
    AT0ZOE2          -0.929420E+00   0.223757E+02   0.808198E+02   0.817493E+02   0.180640E+02   0.191293E+02   0.962142E+02   0.278438E+00
    AT10002           0.126214E+02   0.258268E+02   0.812732E+02   0.686518E+02   0.224881E+02   0.323215E+02   0.521333E+03   0.717250E+00
    AT2KA41           0.805719E+01   0.222955E+02   0.839243E+02   0.758671E+02   0.222045E+02   0.311431E+02   0.515380E+03   0.745290E+00
    AT2SP10           0.366959E+02   0.441297E+02   0.917167E+02   0.550208E+02   0.199311E+02   0.295400E+02   0.334514E+03   0.568161E+00
    AT2VL52          -0.174685E+02   0.297170E+02   0.898628E+02   0.107331E+03   0.188578E+02   0.189520E+02   0.684216E+02   0.191447E+00
    AT2WO35           0.118365E+02   0.254466E+02   0.834347E+02   0.715981E+02   0.204073E+02   0.330375E+02   0.500255E+03   0.741990E+00
    Voici chaque colonne à quoi elle correspond:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    *************************************************************
    !!  code Station          Biais           rmse        moy mod        moy obs   ecc_type_mod   ecc_type_obs            cov    correlation
    !!AT0PIL1          -0.286423E+01   0.190922E+02   0.789038E+02   0.817680E+02   0.221314E+02   0.248293E+02   0.374993E+03   0.682417E+00
    !***********************************************************************
    Ce fichier contient 515 lignes

    Ce que je voudrais faire c'est un programme me créant un nouveau fichier correspondant au 2eme fichier mais en m'ajoutant la localisation du fichier, c'est à dire, rur, urb ou sub entre code de la station et rmse.


    Voila ce que j'ai commencé mais je suis bloquée:

    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
    program 
        implicit none
      	integer, parameter :: nbst=515        !nombre de stations
     	double precision :: biais, rmse, moy_m, moy_o, ecc_typ_m, ecc_typ_o, cov, corr
    	character (len=7) :: code_m, code_l
    	character (len=3) :: bac, typ
     
          real, allocatable, dimension(:) :: lon                          ! input longitude (m)
          real, allocatable, dimension(:) :: lat                          ! input latitude (m)
     
    !allocate
    	allocate(lon(nbst))
            allocate(lat(nbst)) 
     
     
     
     
    open(unit=11, file='/home/Bureau/O3_summer.txt', status='old')
    !***********************************
    !! AT60190 46.6519 15.3678 bac rur
    !***********************************
        read(11,*) code_l, lat, lon, bac, typ
     
     
        open(unit=12, file='/home/Bureau/comparaisons.dat', status='old')
    !*******************************************************************************************************************************************
    !!         Station          Biais           rmse        moy mod        moy obs   ecc_type_mod   ecc_type_obs            cov    correlation
    !!AT0PIL1          -0.286423E+01   0.190922E+02   0.789038E+02   0.817680E+02   0.221314E+02   0.248293E+02   0.374993E+03   0.682417E+00
    !*******************************************************************************************************************************************
        read(12,*) code_m, biais, rmse, moy_m, moy_o, ecc_typ_m, ecc_typ_o, cov, corr
     
        open( unit=23, file='/home/Bureau/statistique.dat', status='unknown')

    En vous remerciant par avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut greendiamond,
    Bientôt la fin du stage alors. C'est proche de ce qui avait été fait :
    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
    program main
        implicit none
        type enreg
            character (len=7) :: station
            character (len=3) :: localisation
        end type enreg
     	double precision :: biais, rmse, moy_m, moy_o, ecc_typ_m, ecc_typ_o, cov, corr
    	character (len=7) :: code_m
        integer :: ios
        type(enreg), allocatable :: corresp(:)
        character(len=3) :: valdef(1) = (/''/)
     
        ! Lecture du fichier donnant la correspondance station - localisation
        call lire_correspondance('O3_summer.txt')
     
        ! Lecture du fichier du résultats du traitement
        open(unit=11, file='comparaisons.txt', status='old')
        open(unit=12, file='statistique.dat', status='unknown')
        do
            read(11,*,iostat=ios) code_m, biais, rmse, moy_m, moy_o, ecc_typ_m, ecc_typ_o, cov, corr
            if (ios /= 0) exit
            write(12,'(2(a7,x),8e14.6)') code_m, &
                pack( corresp%localisation, corresp%station == code_m, valdef), &
                biais, rmse, moy_m, moy_o, ecc_typ_m, ecc_typ_o, cov, corr
        enddo
        close(11) ; close(12)
     
    contains
        subroutine lire_correspondance (fichier)
            character(len=*), intent(in) :: fichier
            character(len=7) :: station
            character(len=3) :: typestat, localisation
            double precision :: longitude, latitude
            integer :: ios, nb_ligne
            logical :: premier = .true.
     
            do
                open(unit=11, file= fichier, status='old')
                nb_ligne = 0
                do
                    read(11,*,iostat=ios) station, longitude, latitude, typestat, localisation
                    if (ios /= 0) exit
                    nb_ligne = nb_ligne + 1
                    if (.not. premier) corresp(nb_ligne) = enreg( station, localisation)
                enddo
                close(11)
                if (premier) then
                    premier = .false.
                    allocate(corresp(nb_ligne))
                else
                    exit
                endif
            enddo
        end subroutine lire_correspondance
     
    end program

  3. #3
    Invité
    Invité(e)
    Par défaut Merci merci merci
    Je te remercie infiniment Dardanos.
    Avec toute ton aide si précieuse je serais obligée de te citer dans mon rapport de stage. Oui bientot la fin... j'ai hate que sa se termine;

Discussions similaires

  1. [VB6]Lecture dans fichier puis récuperation dans un tableur
    Par Pexou dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 07/06/2013, 14h28
  2. [Batch] Lecture fichier puis ecriture dans base MySQL
    Par debo41 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 05/08/2009, 18h18
  3. Réponses: 3
    Dernier message: 27/03/2009, 10h54
  4. lecture puis ecriture dans un fichier
    Par charlix dans le forum C
    Réponses: 22
    Dernier message: 15/11/2007, 11h31
  5. [VBA] Recherche d'une valeur dans un autre fichiers puis
    Par Nicos77 dans le forum Général VBA
    Réponses: 11
    Dernier message: 24/03/2006, 11h24

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