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 :

Comparaison de valeur avec !=


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de tom06440
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Par défaut Comparaison de valeur avec !=
    Bonjour

    Je débute en perl et je rencontre un soucis avec une comparaison.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while(<FILE>)
            {
                    if( $_ != $mavar )
                    {
                            print $_."\n";
                    }
            }
    Pour faire simple, je lis un fichier. puis je compare le contenu de la ligne avec une variable.
    En réalité, mon code fait que toutes les lignes sont identiques lors de la comparaison ... alors que ce n'est pas le cas (si j'affiche $_ avant la comparaison j'ai bien chaque ligne qui apparait ...)
    Qu'ai-je fait comme bétise ? Si quelqu'un pouvait éclairer ma lanterne ...

    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 167
    Par défaut
    Bonjour,
    l'opérateur != compare des nombres, donc $_ et $mavar sont convertis en nombres, si ces variables ne contiennent pas le début de l'écriture d'un nombre, le résultat de la conversion est zéro. Cela explique le résultat : 0 n'est pas différent de 0.
    Pour comparer des chaînes de caractères utilise eq ou ne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if( $_ ne $mavar )
                    {
                            print $_."\n";
                    }
    Ça devrait marcher.
    Nibroc.

    Citation Envoyé par tom06440 Voir le message
    Bonjour

    Je débute en perl et je rencontre un soucis avec une comparaison.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while(<FILE>)
            {
                    if( $_ != $mavar )
                    {
                            print $_."\n";
                    }
            }
    Pour faire simple, je lis un fichier. puis je compare le contenu de la ligne avec une variable.
    En réalité, mon code fait que toutes les lignes sont identiques lors de la comparaison ... alors que ce n'est pas le cas (si j'affiche $_ avant la comparaison j'ai bien chaque ligne qui apparait ...)
    Qu'ai-je fait comme bétise ? Si quelqu'un pouvait éclairer ma lanterne ...

    Merci d'avance

  3. #3
    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 : 59
    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
    Par défaut
    Et pour éviter de passer à coté de ce genre d'effets de bord, utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use strict;
    use warnings;
    en début de TOUT script. Ainsi, perl t'informera que tu as tenté d'utiliser un opérateur numérique avec des opérandes non numériques (ce qui est légal, puisqu'il y a conversion, mais rarement approprié).

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/06/2015, 12h22
  2. Réponses: 3
    Dernier message: 27/05/2014, 14h58
  3. Comparaison de lettres avec valeur ASCII
    Par Vince dans le forum C++
    Réponses: 4
    Dernier message: 04/03/2009, 11h20
  4. Comparaison de valeur de ligne avec deux feuilles différentes
    Par charlix dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/07/2008, 15h54
  5. Réponses: 5
    Dernier message: 27/10/2007, 10h11

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