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 :

recherche de l'ocurrence de sous-chaine dans chaîne


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut recherche de l'ocurrence de sous-chaine dans chaîne
    Bonjour,

    dans mon script, j'ai deux variable $x, $y.
    Je voudrais pouvoir tester la condition:

    SI $y dans $x.

    Je sais, avec grep, ou index, je devrais y arriver. j'ai essayé ça:

    if(index($x,$y) >= 0) --> IL NE TROUVE RIEN
    if (grep /$y/,$x) --> IL NE TROUVE RIEN

    Bon, je dois être à coté de la plaque. Si quelqu'un peut me remettre dessus ... merci

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: recherche de l'ocurrence de sous-chaine dans chaîne
    Citation Envoyé par david_m
    dans mon script, j'ai deux variable $x, $y.
    Je voudrais pouvoir tester la condition:

    SI $y dans $x.

    Je sais, avec grep, ou index, je devrais y arriver.
    En fait, il n'y a pas besoin d'utiliser grep ou index

    C'est simplement le champ d'application de l'opérateur de mise en correspondance d'expressions rationnelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($x =~ m/$y/) { print "$x dans $y\n" }
    Ca devrait aller comme ça

  3. #3
    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
    Non, s'il s'agit de sous-chaîne et non d'expression rationnelle, il vaut mieux utiliser index, c'est à la fois plus rapide et plus sûr. Par contre je ne sais pas comment tu l'utilises, mais index marche très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/perl
    use strict; use warnings;
     
    my $x = "machin truc bidule";
    my $y = "truc";
     
    print "Ok\n" if index( $x, $y ) > -1;
    --
    Jedaï

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par Jedai
    Non, s'il s'agit de sous-chaîne et non d'expression rationnelle, il vaut mieux utiliser index, c'est à la fois plus rapide et plus sûr. Par contre je ne sais pas comment tu l'utilises, mais index marche très bien ...
    Exact !

    Juste une question, david_m, sur les variables $x et $y : il n'y a pas un retour chariot qui traine à la fin de la variable recherchée ($y, ici) ?

  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
    Citation Envoyé par Jedai
    Non, s'il s'agit de sous-chaîne et non d'expression rationnelle, il vaut mieux utiliser index, c'est à la fois plus rapide et plus sûr. Par contre je ne sais pas comment tu l'utilises, mais index marche très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/perl
    use strict; use warnings;
     
    my $x = "machin truc bidule";
    my $y = "truc";
     
    print "Ok\n" if index( $x, $y ) > -1;
    --
    Jedaï
    encore une astuce de rapidité, c'est àrajouter dans post it optimisation, c'est toujour bien de l'avoir en tete.
    allez les gars, hesitez pas à rajouter ce genre d'astuces!!
    sinon on oublie et ça se perd dans les threads

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    d'abord merci pour vos réponses.

    dans ma variable $y, je parse un tableau, lui-même généré à partir d'un fichie du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    valeur1
    valeur2
    valeur3
    ...
    le soucis, c'est que quand je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (<FIC>){
       print "ligne : $_\n";
    }
    il m'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ligne: valeur1
    valeur2
    valeur3
    ...
    --> Il me le lit pas ligne par ligne !!!! il me prend tout en bloc. donc après forcément jes des soucis pour construire mon tableau. j'ai vu qu'il y a des modes différents de lecture. ça viendrait pas de là dès fois ?


    [Edit]
    Balises [code] et [code] ajoutées par 2Eurocents.
    Merci d'y penser à l'avenir
    [/Edit]

  7. #7
    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
    Ca ressemble à un problème de variable $/ mal localisée, mais tu ne nous donnes pas assez de code pour qu'on puisse t'aider, ce que tu nous montre est correct et le problème vient sûrement du reste. Par ailleurs que signifie :
    dans ma variable $y, je parse un tableau
    ...

    --
    Jedaï

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Le problème venait en effet de ma variable $/, mal initialisée. Merci pour ton aide jet d'ail (et tous les autres)

    david m.

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

Discussions similaires

  1. Réponses: 53
    Dernier message: 14/05/2008, 18h13
  2. Rechercher une sous chaine dans un chaine
    Par franck06 dans le forum Access
    Réponses: 2
    Dernier message: 20/09/2006, 14h53
  3. Recherche une sous-chaine dans un champ ?
    Par nerick dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/03/2006, 13h46
  4. Rechercher une sous chaine dans une chaine
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/02/2005, 10h36
  5. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39

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