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 :

substition vs split-join


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut substition vs split-join
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    			my $orga_query_sans_underscore = $orga_query;
    			my @sans_underscores = split /_/, $orga_query_sans_underscore;
    			my $sans_underscore = join '\s*', @sans_underscores;
     
    			if((exists $h_organismes{$orga_sbjct}) || ($orga_sbjct =~ /$orga_query_sans_underscore/i)){
    				$alignment = '';
    				next; print "même organisme\n";
    			}
    Je remplace les underscores par des \s* dans $orga_query afin de l'utiliser dans une expression régulière. Cela serait-il plus propre via une substitution?

    Comment faire afin de dire au système que les \s* de $orga_query_sans_underscore doivent être considérés comme des espaces?

    Merci,

  2. #2
    Expert confirmé
    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
    Par défaut
    Ton code ne fait pas ce que tu dis, c'est volontaire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (my $rx_orga_query = $orga_query) =~ s/_/\s*/g;
     
    if( exists $h_organismes{$orga_sbjct}
        || $orga_sbjct =~ /$rx_orga_query/i ) {
      $alignment = '';
      next; print "même organisme\n";
    }
    Par ailleurs, y a-t-il d'autres caractères spéciaux dans $orga_query ? S'il y en a il faut faire un peu plus de prétraitement.

    (et le print ne sera jamais exécuté, vu qu'il est après next)

    --
    Jedaï

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Ton code ne fait pas ce que tu dis, c'est volontaire ?
    non.
    J'avais essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $rx_orga_query = $orga_query;
    my $rx_orga_query =~ s/_/\s*/g;
    mais, j'avais un message d'erreur.

    Pour
    Je l'ai remplacé par
    ... il paraitrait que cela est mieux.

    Par ailleurs, y a-t-il d'autres caractères spéciaux dans $orga_query ? S'il y en a il faut faire un peu plus de prétraitement.
    Non, il n'y en a aucun autre. Quel prétraitement aurais-je dû faire? Un quotemeta?

    (et le print ne sera jamais exécuté, vu qu'il est après next)
    Oui, en effet, c'était seulement dans le but de vérifier si je passais bien le if et j'ai remarqué que ce print était mal placé lors des tests.


    A vrai dire, je me suis rendue compte que je n'avais jamais que un ou deux underscores ... mais je pourrais en avoir 3 ou 4 par la suite. Tant que je n'en ai qu'un seul maximum, j'ai simplement fait un test pour vérifier si j'ai un underscore puis en fonction de cela, j'ai deux expressions régulières différentes. Si j'ai un underscore je fais un my ($genus, $species) = ( $orga_query =~ /(\w+?)_(\w+)/); pui j'inclus ces deux variables séparées par \s* dans l'expression régulière. Sinon, je fais simplement /$orga_query/.

    Vaut-il mieux faire le plus géréral possible, en essayant d'englober le plus de cas possibles, pour au cas où nous tomberions sur un cas un peu différent ou au contraire faire au plus simple, ne prévoir que les cas connus quitte à faire plusieurs tests et à écrire un code plus long. Je suppose qu'il n'y a pas de réponse correcte, que cela dépend du cas.


    Merci,

  4. #4
    Expert confirmé
    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
    Par défaut
    Oups... Petite erreur de ma part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (my $rx_orga_query = $orga_query) =~ s/_/\\s*/g;
    Dans la partie gauche d'une substitution, la chaîne est interpolée comme entre double quotes, ce qui signifie que \s était interprété comme une séquence d'échappement erronée.
    Ca devrait marcher maintenant.

    --
    Jedaï

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

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Oui, cela fonctionne merci. Je pensais avoir testé cette expression sans avoir de résultat. Peut-être avais-je ajouté un backslash de trop.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/05/2012, 18h19
  2. Comparaison de ''.join(ch.split()) et ch.replace(' ','')
    Par eyquem dans le forum Général Python
    Réponses: 5
    Dernier message: 05/01/2009, 03h14
  3. Pas de JOIN sous Oracle (vraiment dommage...)
    Par Isildur dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/03/2007, 11h28
  4. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57
  5. split en xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/03/2003, 10h08

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