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 :

Comment incrémenter la date


Sujet :

Fortran

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Points : 37
    Points
    37
    Par défaut Comment incrémenter la date
    Bonjour

    Je suis en train de travailler sur des données acquises selon des intervalles de dates différents (par huitaine, par décade, ...). Plus tard je vais lire ces dates pour pouvoir traiter mes données

    Je souhaiterai écrire un programme qui édite les différentes dates ligne par ligne (cf fichier joint) Ici les 4 premiers caractères correspondent à l'année et les 3 derniers au jour julien correspondant à la date d'acquisition et l'on a 1 acquisition tous les 8 jours. Ne voulant pas avoir à saisir manuellement toutes ces dates surtout que c'est très fastidieux vu le nombre d'années sur lesquels je travaille et en outre la variabilité du cycle d'acquisition, comment procéder pour parvenir à "fusionner" l'année et le jour?

    Voici un exp de code qui "bugg" en considérant que je travaille sur 7années (de 2001 à 2007), les données étant acquises toutes les huit jours
    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
     
    implicit none
     
    integer,parameter::n_year = 7, n_day = 8 , n_dec = 1+ 365/n_day
    ! n_dec = nb d'acquisition par an, n_day = durée d'uncycle
     
    integer:: year(n_year), jour(n_dec), i, j
     
    year = (/(2001 +i,i=0,n_year-1)/)
     
    jour =(/(i*n_day + 1,i=0,n_dec -1)/)
     
    open(10, file='exp', form = 'formatted')
     
    do i = 1, n_year
     
      do j=1,n_dec
     
       write(10,fmt ='(a4,a3)')year(i),jour(j)
     
      enddo
     
    enddo
     
    close(10)
     
    end
    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Il y a un problème de format dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       write(10,fmt ='(a4,a3)')year(i),jour(j)
    year(i) et jour(j) sont des entiers, mais le spécificateur de format 'aN' s'applique a une chaine de caractères de taille N.

    Une alternative, pour réaliser ce que tu souhaites, serait de d'abord écrire ces infos dans une chaine de caractère (en prenant soin d'ajouter des zéros au bon endroit pour le compteur correspondant aux jours) puis dans le fichier.
    Par exemple:
    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
     
    program essai_write
     
    implicit none
     
    character(len=7) :: text 
    integer,parameter::n_year = 7, n_day = 8 , n_dec = 1+ 365/n_day
    ! n_dec = nb d'acquisition par an, n_day = durée d'uncycle
     
    integer:: year(n_year), jour(n_dec), i, j
     
    year = (/(2001 +i,i=0,n_year-1)/)
     
    jour =(/(i*n_day + 1,i=0,n_dec -1)/)
     
    open(10, file='exp', form = 'formatted')
     
    do i = 1, n_year
      ! écriture de l'année
      write(text(1:4),fmt='(i4)') year(i)
      do j=1,n_dec
       ! écriture du nombre de jours
        if (jour(j).lt.10) then
          write(text(5:7),fmt='(a2,i1)') '00',jour(j)
        else
          if (jour(j).lt.100) then
            write(text(5:7),fmt='(a1,i2)') '0',jour(j)
          else
            write(text(5:7),fmt='(i3)') jour(j)
          endif
        endif
     
         ! écriture de la chaine complète dans le fichier
        write(10,fmt='(a7)') text
     
      enddo
     
    enddo
     
    close(10)
     
    end
    Je sais qu'il existe une manière plus rapide (et élégante) en jouant sur les spécificateurs de formats (et ainsi imposer l'écriture des éventuels zéros en tête du nombre de jours), mais je ne parviens pas à m'en souvenir...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Points : 37
    Points
    37
    Par défaut
    Salut

    Merci pour cette rapide réponse car cette modification résoud mon problème.

    J'avais déjà noté l'incompatibilité des types de format "character" et "integer".

    Bien que le problème ait été résolu si quelqun connait comment écrire ce de façon élégante, je reste toujours preneur et peut être qu'un jour je serai un en fortran

    Bon week end

  4. #4
    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 arthy Voir le message
    Bien que le problème ait été résolu si quelqun connait comment écrire ce de façon élégante, je reste toujours preneur
    Il faut préciser à la fois la largeur du champ et le nombre de chiffres dans le format. Ainsi, le format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    '(I4.4,I2.2,I2.2)'
    écrira l'année en quatre chiffres, le mois et le jour en deux en préfixant des zéros si nécessaire. Comme d'habitude, on peut utiliser ce format en écriture directe vers un fichier, ou vers une chaine de caractères.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Points : 37
    Points
    37
    Par défaut
    Salut

    Ce que tu ajoutes est bien dans le cas où les données peuvent se réprésenter par jour et par mois. Seulement dans mon cas (voir fichier du tout 1er message), l'on ne connait pas la date par mois et par jour, mais plutot par jours juliens

    Et merci

  6. #6
    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 arthy Voir le message
    Ce que tu ajoutes est bien dans le cas où les données peuvent se réprésenter par jour et par mois. Seulement dans mon cas (voir fichier du tout 1er message), l'on ne connait pas la date par mois et par jour, mais plutot par jours juliens
    C'est un exemple, à toi d'adapter à ton utilisation. Si tu as un entier qui peut avoir jusque trois chiffres (un jour julien entre 1 et 365 par exemple), le format est I3.3 pour avoir des zéros préfixés si nécessaire.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Points : 37
    Points
    37
    Par défaut
    Ok

    Cè bon

    Merci encore

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

Discussions similaires

  1. Comment incrémenter une date d'un an ?
    Par imedg dans le forum SQL
    Réponses: 13
    Dernier message: 22/01/2021, 17h12
  2. Réponses: 3
    Dernier message: 04/02/2011, 13h36
  3. [débutant] comment incrémenter une date
    Par shamri dans le forum Android
    Réponses: 2
    Dernier message: 15/06/2010, 14h22
  4. Comment incrémenter une date par pas du Mois ?
    Par tarbala dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/11/2008, 06h16
  5. Comment incrémenter une date
    Par hamadi_insat dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2006, 22h53

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