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 :

comparer deux chaines de caractères


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut comparer deux chaines de caractères
    Bonjour à tous,

    j'ai deux chaines de caractères à comparer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if($chaine1 =~ $chaine2 or $chaine1 =~ /^$chaine2[0-9]{1,2,3}$/ ) {
    return 1;
    }
    else {
    return 0;
    }
    pour la première condition ca marche mais pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $chaine1 =~ /^$chaine2[0-9]{1,2,3}$/
    ça ne marche pas est-ce qu'il y a un problème d'écriture ?

    merci d'avance

  2. #2
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonjour,

    Dis nous ce que tu veux faire comme comparaison, et on te dira comment la faire
    A priori, le {1,2,3} me semble pour le moins étrange...
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    bonjour, moi je dois comparer deux identifiants qui ont la forme suivante :
    AAAAA(999) pour satifaire ma condition si par exemple $chaine1 = aaaaa $chaine2 ne peut prendre que aaaaa ou aaaaa suivi de 0 ou 1 ou 2ou 3 caractères 0-9 pour le moment la condition test seulement l'égalité et pour :
    /^$chaine2[0-9]{1,2,3}$/
    je ne sais pas si l'ecriture est bonne


    j'espère être clair

    merci

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Tu n'as pas repris 0 chiffre suivant les caractères. Pour [0-9] tu peux utiliser \d

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($chaine2 =~ /$chaine\d{0,3}/)
    {0,3} signifie trouvé entre 0 et 3 fois


    Jasmine,
    -- Jasmine --

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    merci jasmine , mais quand j'affecte à chaine1 = aaaaa et à chaine2 =aaaaa99999 donc 2 caractères de plus il accepte et il me retourne 1 !
    est-ce que or est utilisable en perl ou pour le "ou" on fait || ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Salut,

    En effet il faut rajouter les délimiteurs de début et fin de chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($chaine2 =~ /^$chaine\d{0,3}$/)
    Sinon en Perl on peut mettre or ou ||, les deux sont acceptés ; tâche tout de même de ne pas les mélanger, et si tu utilises "or", utilise également "and" à la place de &&, etc.

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    merci ça ne marche pas tjr voici ma fonction qui doit retourner 1 si chaine1 = chaine2 ou chaine1 =chaine2[0-9]{0,3}. sinon elle retourne 0

    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
     
    sub valide_id {
     
    $nom = "jourde";
    $prenom = "pierre";
    $test;
    my ($id)  = @_; #récupération de la séquence à traiter
    $test = substr($prenom,0,2);# Les 2 premières lettres du prénom
    $test2 = substr($nom,0,3); # les 3 premières lettres du nom
    $test = $test.$test2; 
     
    if($id =~ $test || $id =~ /^$test\d{0,3}$/ ){
    return 1 ;
    }
    else{
    return 0;
    }
    }
    et si je l'appelle avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $cd = valide_id("pijou12345"); #deux caractères de plus 
     printf "resultat :$cd";
    elle retourne 1 ! alors qu'elle doit retourner 0,
    je sais que le problème réside ici : $id =~ /^$test\d{0,3}$/

    j'espère que m'aidiez le plus vite possible
    merci

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par dewdew Voir le message
    et si je l'appelle avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $cd = valide_id("pijou12345"); #deux caractères de plus 
     printf "resultat :$cd";
    elle retourne 1 ! alors qu'elle doit retourner 0,
    je sais que le problème réside ici : $id =~ /^$test\d{0,3}$/
    Ben c'est dommage, parce que le problème n'est pas là....
    est la partie erronée, puisque tu n'as pas mis les ancres de début '^' et de fin '$'...

    En plus tu as des variables non déclarées, et aucune indentation...
    Je te fais une version plus correcte, et te conseille vivement de consulter la section sur le style en Perl dans notre FAQ :

    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
    sub check_id {
      # je doute que tous tes tests soient effectués avec les mêmes
      # nom/prénom, ne devrais tu pas passer ceci en paramètre ?
      my ($nom, $prenom) = ('jourde', 'pierre');
     
      # récupération de la séquence à traiter
      my $id  = shift;
     
      # Les 2 premières lettres du prénom puis les 3 premières lettres du nom
      my $id_part = substr($prenom,0,2) . substr($nom,0,3); 
     
      return ($id =~ m/^\Q$id_part\E\d{0,3}$/);
    }
     
    print "id1_ok\n" if check_id( 'pijou12345' );
    print "id2_ok\n" if check_id( 'pijou12' );
    --
    Jedaï

  9. #9
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    merci Jedaï, vous avez tout à fait raison, quand je fait:
    ça marche j'ai oublier les ancres de début '^' et de fin '$' !!

    merci à tous

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

Discussions similaires

  1. Comparer deux chaines de caractères
    Par xenos dans le forum Delphi
    Réponses: 5
    Dernier message: 18/06/2007, 11h01
  2. Comparer deux chaines de caractères
    Par helww dans le forum C++
    Réponses: 10
    Dernier message: 24/04/2007, 11h26
  3. Réponses: 4
    Dernier message: 08/09/2006, 09h41
  4. Comparer deux chaines de caractères dans un if ?
    Par Xplosif² dans le forum C++
    Réponses: 6
    Dernier message: 25/02/2006, 19h21
  5. comparer deux chaines de caractères
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2006, 14h31

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