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 PHP Discussion :

Comparaison de chaines


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut Comparaison de chaines
    Bonjour à tous et toutes,

    Un problème tout bête occupe mon esprit depuis un bout de temps et je ne m'en sort plus.

    Voici le bout de code :

    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
    $enleve='ordinateur';
    $filename="testsupptablo.txt";
    echo 'Mot : '.$enleve.'<br><br>';
    $tableau = file($filename);
    for ($i=0;$i<count($tableau);$i++)
    {
    	if ($tableau[$i]==$enleve)
    	{echo $i.' OK '.$tableau[$i].' -- '.$enleve.'<br>';}
    	else
    	{echo $i.' NOK '.$tableau[$i].' -- '.$enleve.'<br>';}
    }
     
    echo '<br><br><br>';
    echo $enleve.' --- '.$tableau[2].'<br>';
     
    echo strcmp($enleve,$tableau[2]).'<br>';
    Rien de bien compliqué en fait. J'ai une variable et je désire savoir si elle appartient à un tableau tiré d'un fichier. C'est un code de test donc avec plus d'affichage qu'il ne le faudrait. Là où ça pêche, c'est le résultat du strcmp qui me donne un -2 au lieu d'un 0 bien que $enleve soit strictement identique (de visu) à $tableau[2].

    Où est l'erreur ?

    Merci d'avance pour vos réponses.

    @+
    Voiçi le résultat:
    Mot : ordinateur

    0 NOK pc -- ordinateur
    1 NOK bureau -- ordinateur
    2 NOK ordinateur -- ordinateur
    3 NOK table -- ordinateur
    4 NOK chaise -- ordinateur
    5 NOK ventilateur -- ordinateur
    6 NOK écran -- ordinateur
    7 NOK téléphone -- ordinateur
    8 NOK clavier -- ordinateur
    9 NOK souris -- ordinateur



    ordinateur --- ordinateur
    -2

  2. #2
    Membre éprouvé Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Par défaut
    int strcmp ( string str1 , string str2 )

    strcmp retourne < 0 si str1 est inférieure à str2 ; > 0 si str1 est supérieure à str2 , et 0 si les deux chaînes sont égales.

    Notez que cette comparaison est sensible à la casse.
    n'as tu pas remarqué que ta dernière ligne est égale à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo strcmp('ordinateur','ordinateur\n').'<br>';
    En effet, ton fichier laisse des traces et ces traces sont ce "\n" qui représente le saut à la ligne et qui est invisible à l'oeil nu (ou presque). utilise-donc la fonction trim pour purger tes chaines.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    Ah ben oui, le '\n'. Je n'y avait pas pensé.

    C'est drôle que tu l'ai vu alors qu'il n'apparait pas ni dans le code ni dans le résultat. Peut-être l'habitude.

    Je vois ça demain et je posterai le résultat. Là, je fatigue.

    A demain.

  4. #4
    Membre éprouvé Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    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
    $enleve='ordinateur';
    $filename="testsupptablo.txt";
    echo 'Mot : '.$enleve.'<br><br>';
    $tableau = file($filename);
    for ($i=0;$i<count($tableau);$i++)
    {
           $val = trim($tableau[$i]);
    	if ($val==$enleve)
    	{echo $i.' OK '.$val.' -- '.$enleve.'<br>';}
    	else
    	{echo $i.' NOK '.$val.' -- '.$enleve.'<br>';}
    }

  5. #5
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Par défaut
    C'est parfait. Tout fonctionne comme prévu.

    Je ne savais pas que le fonction trim enlevait aussi les '\n'.

    Merci.

    @+

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

Discussions similaires

  1. [VBA]excel comparaison de chaine de caractere
    Par ogenki dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2006, 16h32
  2. [langage] Comparaison de chaîne
    Par Fastshadow dans le forum Langage
    Réponses: 7
    Dernier message: 05/09/2004, 19h58
  3. comparaison de chaines de caracteres en PLSQL
    Par biozaxx dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/08/2004, 10h41
  4. Comparaison de chaines
    Par Marc_P dans le forum Linux
    Réponses: 6
    Dernier message: 17/02/2004, 18h04
  5. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 23h41

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