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 :

Question opérateur de différence


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Points : 22
    Points
    22
    Par défaut Question opérateur de différence
    Bonjour,

    J'ai fait un script, qui fonctionne très bien, mis à part au niveau de la comparaison entre deux jours, je m'explique voici mon script :

    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
    use strict;
     
    my $FicLog = "";
     
     
    $FicLog = 'd:\partage\sauvegarde.log';
     
    # Date et Heure du Jour
    my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday) = localtime();
    $mon++;
    $year += 1900;
    my $Date_W=sprintf("%02d/%02d/%04d",$day,$mon,$year);
     
    if (!open(LOG, $FicLog)) {
    	print "ERREUR !!! IMPOSSIBLE D'OUVRIR LE FICHIER: $FicLog";
    	exit 2;
    }
     
    while (<LOG>) {
      chomp;
      if (/ERREUR/) {
        print "$_";
        exit 2;
      } elsif (/SAUVEGARDE DU SERVEUR LXFAX131 - DATE : (...) (...)  ([0-9])/) {
    	print "$1\n";
    	print "$2\n";
    	print "$3\n";
    	my $jour = $3;
    #    # Control de la date
    #    if ($jour ne $day) {
    #      print "LE FICHIER LOG A PLUS D'UN JOUR - VERIFIER LA TACHE PLANIFIE SUR LE SERVEUR";
    #      exit 2;
    #    }
     
    }	elsif (/>>>> COPIE DES FICHIERS DE LA BASE DE DONNES REUSSIE/) {
     
      	print "$_";
      	exit 0;  
    	}
    }
    close (LOG);
    print "PROBLEME SUR LA SAUVEGARDE DU SERVEUR LXFAX131";
    exit 2;
    ICI : $jour n'est pas égal à $day ($jour est égal à 3 et $day à 9)

    Il devrait donc logiquement m'afficher ce message : LE FICHIER LOG A PLUS D'UN JOUR - VERIFIER LA TACHE PLANIFIE SUR LE SERVEUR

    Sauf que non il passe à la suite et je ne comprends pas pourquoi.

    Merci pour vos futur réponses.

  2. #2
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    Hello,

    si tes variables sont des numériques tu n'utilises pas le bon comparateur

    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  3. #3
    Membre du Club
    Femme Profil pro
    ingénieur d'étude en bioinformatique
    Inscrit en
    Février 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur d'étude en bioinformatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2011
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    enfin plutot
    pour différent.
    Mais j'ai testé avec ne et ca marche ...
    Du coup je comprends pas ton probleme. Peut etre que c'est dans l'expression regulière que ca marche pas.

  4. #4
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par laura_ Voir le message
    enfin plutot
    pour différent.
    Mais j'ai testé avec ne et ca marche ...
    Du coup je comprends pas ton probleme. Peut etre que c'est dans l'expression regulière que ca marche pas.
    pas faux...désolé.
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  5. #5
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Points : 186
    Points
    186
    Par défaut
    ça marche aussi chez moi !

    vérifies que ton $3 que tu mets dans $jour contient bien ce que tu dis.
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Points : 22
    Points
    22
    Par défaut
    ça ne marche toujours pas, je vais essayer de refaire le script bien propre et je vous le publierais avec le fichier log qu'il analyse.

    Edit : Ca marche, quelqu'un sais par contre comment faire des doubles condition du genre : si $jour != $day et $month != $mois ça dans une même condition il suffit de rajouter & ou il faut faire autre chose.

    Et une autre question, j'ai mes mois en anglais j'aimerais que par exemple que dès qu'il y a marqué Jan qu'il sois capturé et transformé en chiffre du genre 1 puis Feb en 2, etc...

  7. #7
    Membre du Club
    Femme Profil pro
    ingénieur d'étude en bioinformatique
    Inscrit en
    Février 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur d'étude en bioinformatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2011
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    Edit : Ca marche, quelqu'un sais par contre comment faire des doubles condition du genre : si $jour != $day et $month != $mois ça dans une même condition il suffit de rajouter & ou il faut faire autre chose.
    Pour tes doubles conditions il suffit de faire comme tu dis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ($jour != $day && $month!=$mois)
    {
        ...
    }
    Edit : si les mois que tu compare sont en chaine de caractere (Jan, Feb, ...) il faudra utiliser "ne" au lieu de "!=".

  8. #8
    Membre du Club
    Femme Profil pro
    ingénieur d'étude en bioinformatique
    Inscrit en
    Février 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur d'étude en bioinformatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2011
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par aurelien13008 Voir le message
    Et une autre question, j'ai mes mois en anglais j'aimerais que par exemple que dès qu'il y a marqué Jan qu'il sois capturé et transformé en chiffre du genre 1 puis Feb en 2, etc...
    Pour cela, je ferais un systeme de test en remplaçant chaque chaine de caractère ("Jan","Feb",...) par son numéro (1,2,...) mais c'est un peu fastidieux et il existe surement une solution plus simple.

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Points : 22
    Points
    22
    Par défaut
    Long et fastidieux non il n'y a que 12 mois dans l'année, ta méthode m'intéresse, peux tu me donner un exemple pour un mois : Jan en 1

  10. #10
    Membre du Club
    Femme Profil pro
    ingénieur d'étude en bioinformatique
    Inscrit en
    Février 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur d'étude en bioinformatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2011
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    my $mois = "Jan" ;
     
    if ($mois eq "Jan")
    {
    	$mois = 1 ;
    }
    elsif ($mois eq "Feb")
    {
    	$mois = 2 ;
    }
    elsif ...
    print $mois ;
    Voila

  11. #11
    Membre du Club
    Femme Profil pro
    ingénieur d'étude en bioinformatique
    Inscrit en
    Février 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur d'étude en bioinformatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2011
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    ca marche ?

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Points : 22
    Points
    22
    Par défaut
    Pour les mois parfait, sauf pour les doubles conditions, quand je met sois comparaison des mois sois comparaison des jours tout va bien mais quand je met les deux ensemble, il peuvent être erronés tous les deux ou être valide le script passe sans rien dire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($mois != $mon && $jour != $day) {
         print "LE FICHIER LOG A PLUS D'UN JOUR - VERIFIER LA TACHE PLANIFIE SUR LE SERVEUR";
          exit 2;
    Ici par exemple il ne se passe rien alors que les deux conditions ne sont pas respecté.

    Edit : En fait quand les deux conditions sont erroné sa marche, mais quand il n'y en a qu'une sur les deux qui est bonne là sa passe, comme si ce n'était pas un "et" mais un "ou"

  13. #13
    Membre du Club
    Femme Profil pro
    ingénieur d'étude en bioinformatique
    Inscrit en
    Février 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur d'étude en bioinformatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2011
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    Oui j'avais pas pensé à cette possibilité de l'un ou l'autre de faux

    en fait il faut utiliser ou.
    donc tu remplaces && par ||, ca prendra en compte les jours faux, les mois faux et les deux combinés.

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 65
    Points : 22
    Points
    22
    Par défaut
    C'est parfait merci pour ton aide Très très grand merci

  15. #15
    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
    Citation Envoyé par laura_ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    my $mois = "Jan" ;
     
    if ($mois eq "Jan")
    {
    	$mois = 1 ;
    }
    elsif ($mois eq "Feb")
    {
    	$mois = 2 ;
    }
    elsif ...
    print $mois ;
    Voila
    Ou plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $mois = "Mar";
    my %mois = ("Jan" => 1, "Fev" => 2, ...);
    print $mois{$mois}
    Attention dans ce cas, de ne pas décrémenter le numéro de mois retourné par localtime, qui commence à 1 pour janvier.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

Discussions similaires

  1. opérateur de différence
    Par papaye0 dans le forum Langage
    Réponses: 2
    Dernier message: 08/02/2011, 20h01
  2. Question opérateur =
    Par carton99 dans le forum Débuter
    Réponses: 4
    Dernier message: 10/04/2010, 13h21
  3. Question opérateurs binaires
    Par Evocatii dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 15/01/2009, 19h44
  4. Réponses: 4
    Dernier message: 26/07/2007, 21h45
  5. [c#]Question sur les différences de version
    Par Julien1987 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 23/02/2007, 17h37

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