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

Langage Perl Discussion :

difference entre deux dates en jour


Sujet :

Langage Perl

  1. #1
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut difference entre deux dates en jour
    salut à tous,

    j'ai deux dates au forma aaaammjj et je veux calculer la difference, voila ce que j'ai fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my ( $annee1, $mois1, $jour1 ) = $plusancien =~ m/(\d{4})(\d{2})(\d{2})/;
            my ( $annee2, $mois2, $jour2 ) = $plusrecent =~ m/(\d{4})(\d{2})(\d{2})/;
            my $s_projectduration = Delta_Days( ( $annee1, $mois1, $jour1 ), ( $annee2, $mois2, $jour2 ) );
    et la ça ne marche pas, est ce que quelqu'un a une idee de l'erreur que j'ai peut etre commis,merci

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Dans les sources à télécharger.

  3. #3
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    merci j'y vais

  4. #4
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    @Djibril que pourtatnt que j'ai fait pareil, mais je doute sur la façon dont j'ai decoupé mes date, peut etre avec un plus du bout de mon code vous verrez mon probleme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my 
           @s_lfdtriee = sort @s_lfd;        #@s_lfd est une liste de date au format aaaammjj
            my @s_lldtriee = sort @s_lld;  #@s_lld est une liste de date au format aaaammjj
            my $plusancien = $s_lfdtriee [0]; # la plus ancienne date des firstdate
            my $plusrecent = $s_lldtriee [-1];  # la plus recente date des lastdate
            #print "Date de lancement de l'etude : $plusancien\n";
            #print "Date de cloture de l'etude : $plusrecent\n";
            my ( $annee1, $mois1, $jour1 ) = $plusancien =~ m/(\d{4})(\d{2})(\d{2})/;
            my ( $annee2, $mois2, $jour2 ) = $plusrecent =~ m/(\d{4})(\d{2})(\d{2})/;
            my $s_projectduration = Delta_Days( ( $annee1, $mois1, $jour1 ), ( $annee2, $mois2, $jour2 ) );
    je signale que j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Date::Calc qw(:all);
    au debut de mon script

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Fais un print pour voir déjà si tu travailles sur des bonnes valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print "$plusancien => $annee1, $mois1, $jour1\n";
    print "$plusrecent => $annee2, $mois2, $jour2\n";

  6. #6
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    et que pensez-vous de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $plusrecent = $s_lldtriee [-1];
    sachant j'ai trie une liste de date et je veux recuperer la date la plus recente de la liste triée, est ce que c'est correct?

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Tout dépend de ce qu'il y a dans le tableau

  8. #8
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    dans le tableau il ya des dates de la forme aaaammjj

  9. #9
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    as-tu mis les print que je t'ai donné ci-dessus ?

  10. #10
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    oui et voici les erreurs en piece jointe

    Use of uninitialized value $plusrecent in pattern match (m//) at count2.pl line
    324 (#1)
    (W uninitialized) An undefined value was used as if it were already
    defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
    To suppress this warning assign a defined value to your variables.

    To help you figure out what was undefined, perl will try to tell you the
    name of the variable (if any) that was undefined. In some cases it cannot
    do this, so it also tells you what operation you used the undefined value
    in. Note, however, that perl optimizes your program and the operation
    displayed in the warning may not necessarily appear literally in your
    program. For example, "that $foo" is usually optimized into "that "
    . $foo, and the warning will refer to the concatenation (.) operator,
    even though there is no . in your program.

    Use of uninitialized value $annee2 in concatenation (.) or string at count2.pl
    line 325 (#1)
    Use of uninitialized value $mois2 in concatenation (.) or string at count2.pl
    line 325 (#1)
    Use of uninitialized value $jour2 in concatenation (.) or string at count2.pl
    line 325 (#1)

    Use of uninitialized value $year in numeric ge (>=) at
    /usr/local/share/perl/5.10.1/Date/Calc/PP.pm line 1502 (#1)
    Uncaught exception from user code:
    Date::Calc::PP::Delta_Days(): Date::Calc::Delta_Days(): not a valid date at count2.pl line 327
    at /usr/local/share/perl/5.10.1/Carp/Clan.pm line 225
    Carp::Clan::__ANON__('Date::Calc::Delta_Days(): not a valid date') called at /usr/local/share/perl/5.10.1/Date/Calc/PP.pm line 408
    Date::Calc::PP::DATECALC_DATE_ERROR('Delta_Days') called at /usr/local/share/perl/5.10.1/Date/Calc/PP.pm line 671
    Date::Calc::PP::Delta_Days(2011, 02, 15, undef, undef, undef) called at count2.pl line 327
    main::CheckDatTables called at count2.pl line 61
    abderrazagh@cleo:~/amal/scriptdir$

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Bon, si tu veux de l'aide, va falloir nous montrer ton code. C'est difficile à deviner.

  12. #12
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    pas de souci, c'set juste pour ne pas necombrer la discussion, voici la fonction au complet

    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
    sub CheckDatTables() {
        print "_________________________________________ CheckDatTables\n";
        my ($s_samplesize, $s_dtc,$s_cmp, $s_rng, $s_qf, $s_sc ) = (0, 0,0,0,0,0); # inititialisation 
        my ($s_status, $s_dmc,$s_de,$s_pr, $s_pcmp, $s_psc, $s_pqf, @s_lfd, @s_lld, @s_infodat);
     
        foreach my $s_project (%datdir){
        $s_samplesize = scalar @{$datdir{$s_project}}; # Taille de l'echantillon d'etude
        #my @s_ldat; 
        foreach my $s_fdat (@{$datdir{$s_project}}){
              open(FHdat, "$s_fdat") or die "Impossible d'ouvrir le fichier $s_fdat";
              while (my $line = <FHdat>)
              {
                  chomp ($line);
                  # print "$line\n";
                  if ($line=~/^\/\// || $line =~ /^$/) { next;}
                  #next if ( $line = ~/^\/\//) ; # on ignore les lignes commençanr pat un //
                  else  {
                          my ($s_var,$s_val)=split /=/, $line, 2 ; # on divise la ligne en deux parties separée par un "="
                          switch( $s_var)
                          {
                               case (/^qtsatus$/) {
                                                      if ($s_val==1) {$s_rng +=1; }
                                                      if ($s_val==2) {$s_cmp +=1; }
                                                      if ($s_val==3) {$s_sc +=1; }
                                                      if ($s_val==4) {$s_qf +=1; }
                                                  }
                               case (/^CW_duration$/) { $s_dtc +=$s_val; }       # on cumule les duree de connexion
                               case (/^CW_firstdate$/) { push  @s_lfd , $s_val; } # on met dans s_lfd les valeurs des "firstdate"
                               case (/^CW_lastedate$/) { push  @s_lld , $s_val; } # on met dans s_lld les valeurs des "lastdate"
     
                          # next if !exists $datvar{$s_var} ;
                           }
                }
            }
            close(FHdat);
            #_=== Calcul ===
            $s_dmc = $s_dtc/$s_samplesize;          # duree moyenne de connexion 
            $s_pr = ($s_rng/$s_samplesize)*100;     # % de runing
            $s_pcmp =($s_cmp/$s_samplesize)*100;    # % de complet
            $s_psc =($s_sc/$s_samplesize)*100;      # % de screenout
            $s_pqf = ($s_qf/$s_samplesize)*100;     # % de quotafull
     
            #_=== Calcul de la duree du terrain ===
            my @s_lfdtriee = sort @s_lfd;
            my @s_lldtriee = sort @s_lld;
            my $plusancien = $s_lfdtriee [0]; # la plus ancienne date des firstdate
            my $plusrecent = $s_lldtriee [-1];  # la plus recente date des lastdate
            #print "Date de lancement de l'etude : $plusancien\n";
            #print "Date de cloture de l'etude : $plusrecent\n";
            my ( $annee1, $mois1, $jour1 ) = $plusancien =~ m/(\d{4})(\d{2})(\d{2})/;
            #print "$annee1\t$mois1\t$jour1\n";
     print "$plusancien => $annee1, $mois1, $jour1\n";
            my ( $annee2, $mois2, $jour2 ) = $plusrecent =~ m/(\d{4})(\d{2})(\d{2})/;
            print "$plusrecent\n";
     
            my $s_projectduration = Delta_Days( ( $annee1, $mois1, $jour1 ), ( $annee2, $mois2, $jour2 ) );
            #print "Duree de terrain: $s_projectduration jours\n";
     
             #===== Une table de sortie contenant les infos des .dat d'un project =====#
            push @s_infodat, $s_samplesize,$s_projectduration, $s_dtc, $s_dmc, $s_pr,$s_pcmp, $s_psc, $s_pqf;
            close (FHdat);
            ${$datinfo{$s_project}} = [@s_infodat];
       }
     }
      #_=== Affichage test de %datinfo ===
      print Data::Dumper->Dump([\%datinfo], [qw(*datinfo)]); # les dat
     
     
    }

  13. #13
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ton problème vient du fait que $plusrecent n'a pas de valeur valide (undef) parceque @s_lldtriee est vide.
    Et @s_lldtriee est vide parce qu'il n'y a probablement pas de ligne
    CW_lastedate
    dans ton fichier d'entrée.
    Peut-être voulais-tu écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                            case (/^CW_lastdate$/) { push  @s_lld , $s_val; } # on met dans s_lld les valeurs des "lastdate"
    en ligne 29 ?

  14. #14
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    merci c'est exact!

  15. #15
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Le problème est-t-il résolu ? Si oui, merci de le clore.

  16. #16
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Il est peut-être temps que tu découvres l'option -d de perl...

  17. #17
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    j'ai pas compris

  18. #18
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    dis autrement :

  19. #19
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    ok c'est note!

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

Discussions similaires

  1. Difference entre deux dates en jours ouvrés
    Par sabson dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 05/05/2013, 22h18
  2. datediff difference entre deux dates
    Par laurent.w dans le forum Access
    Réponses: 2
    Dernier message: 04/01/2007, 11h57
  3. difference entre deux dates de type Timestamp
    Par err dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/08/2006, 18h44
  4. [VBA] Calculer la différence entre deux dates
    Par T'chab dans le forum Access
    Réponses: 13
    Dernier message: 11/05/2006, 15h12
  5. difference entre deux dates
    Par nizniz dans le forum Oracle
    Réponses: 3
    Dernier message: 09/05/2006, 11h54

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