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

Web Perl Discussion :

Grep avec plusieurs possibilite


Sujet :

Web Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Grep avec plusieurs possibilite
    Bonjour,

    me revoila avec un nouveau probleme

    J'ai un tableau contenant des lignes d'instructions et un autre avec des mots.
    Mon but serait d'obtenir un nouveau tableau avec les lignes d'instruction qui contiennent au moins un des mots du 2eme tableau.

    Ca donne : @tab = grep ( /exp1/ . /exp2/ . /exp3/, @instructions );

    Mon probleme c'est que je n'arrive pas a faire en sorte que les exp* soient tiree du tableau qui contient ces expressions.

    J'avais essaye ceci mais ca ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $test = "/" . join ( '/ . /', @tab2 ) . "/";
     
    @tab = grep ( $test, @instruction );
    Dans l'ideal, il faudrait conserver l'ordre dans lequel se trouve les instructions, mais au vu des problemes que ca me pose, si l'ordre n'est pas conserve ce n'est plus trop grave

    Merci par avance

    Ps : Desole pour les accents, je suis sur un clavier qwerty.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $test = join ( "|", @tab2 );
     
    @tab = grep { /$test/ } @instruction;

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci pour cette reponse ca fonction tres bien.

    Par contre j'avais oublie de preciser quelque chose. Dans ma regex j'avais :

    /expression(,|$)/

    Et avec ton script je n'arrive pas a obtenir le meme resultat.

    Merci en tout cas pour ton aide

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Personne n'a d'idee ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $test = join ( "(,|$)|", @tab2 );
     
    @tab = grep { /$test/ } @instruction;
    Ne fonctionne pas :/


    Edit : En fait j'ai trouve, il suffit de rajoute les conditions supplementaire a chaque element du tableau.

    Merci pour ton aide

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Je pense pas que tu est compris l'intérêt de cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $test = join ( "|", @tab2 );
    Le but est d'utiliser chaque case de ton tableau comme une regex et en faisant un join dessus avec "|" => ou

    donc je ne sais pas pourquoi tu as besoin de Comme tu l'as bien dis, rajoute dans ton tableau les conditions alors.

    Si tu as des caractères tel $ à rechercher, Tu devrais les protéger par des backslash ou utiliser carrément la fonction quotemeta.

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Si si, j'avais bien compris l'utilite de la premiere ligne.
    Je voulais rajouter (,|$), car mes mots sont cours (en moyenne 3 lettres) et se termine tous comme ca ou sont avec une virgule. Donc pour pas qu'il ne me les prennent n'importe ou dans la phrase, j'avais besoin de le preciser.

    Quand j'ai modifie ta ligne par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $test = join ( "(,|$)|", @tab2 );
    Je n'avais pas pris en compte le fait que ca se mettait juste entre de entree du tableau et non sur toutes les entrees ( du certainement au manque de sommeil ).

    C'est pourquoi j'ai pense a rajouter dans chaque entree du tableau : (,|\$)

    Du coup je me retrouve bien avec : exp1(,|$)|exp2(,|$)

    Tout ca pour dire que ca marche tres bien.

    Merci

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

Discussions similaires

  1. [XL-2013] Fonction avec si et plusieurs possibilités
    Par cotitine69 dans le forum Excel
    Réponses: 4
    Dernier message: 05/12/2014, 15h09
  2. [MySQL] remplir un champ de formulaire avec plusieurs possibilités
    Par ledisciple dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 20/01/2011, 18h04
  3. Grep sur plusieurs mots avec option -v
    Par rinuom dans le forum Linux
    Réponses: 4
    Dernier message: 10/09/2008, 13h02
  4. [SQL] Recherche avec plusieurs possibilités pour un champ
    Par jeronimo83 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/07/2008, 16h27
  5. Shortcut avec plusieurs touches
    Par scorpiwolf dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/07/2002, 16h57

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