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 :

aide pour expression réguliere


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut aide pour expression réguliere
    Bonjour,

    J'ai un fichier qui est formatter comme cela :

    rs# SNPalleles chrom pos strand genome_build center protLSID assayLSID panelLSID QC_code NA06985 NA06991 NA06993 NA06994 NA07000 NA07019 NA07022 NA07029 NA07034 NA07048 NA07055 NA07056 NA07345 NA07348 NA07357 NA10830 NA10831 NA10835 NA10838 NA10839 NA10846 NA10847 NA10851 NA10854 NA10855 NA10856 NA10857
    J'aimerai faire une expression régulière pour récupérer TOUTES les références NA...., le problème c'est que tout mes fichiers n'ont pas le même nombre de référence. Comment puis je faire pour faire un truc du genre tant qu'il y a NA\d* récupere moi ces valeurs??

    Merci de votre aide

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    je te reponds vite fait, mais d'instinct je ferais un truc dans le genre ...(mon instinct a souvent mauvais instinct )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(<FILE>)
    {
      if( $_ =~ /NA[0-9][0-9][0-9][0-9][0-9]/)
      {
        $liste .= NA.$1.$2.$3.$4.$5;
      }
    }
    si ca peut au moins t'orienter...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Et ben en fait tu doit pas avoir compris ce que je voulais dire. Désolé j'ai du mal m'exprimer.
    La avec ton expression régulière tu récupère qu'une référence NA.... mais moi je voudrait mettre dans un tableau toutes mes références NA.... . La dans mon exemple il y a 27 références.

    Merci

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,
    Citation Envoyé par guiillaume63
    Bonjour,

    J'ai un fichier qui est formatter comme cela :

    rs# SNPalleles chrom pos strand genome_build center protLSID assayLSID panelLSID QC_code NA06985 NA06991 NA06993 NA06994 NA07000 NA07019 NA07022 NA07029 NA07034 NA07048 NA07055 NA07056 NA07345 NA07348 NA07357 NA10830 NA10831 NA10835 NA10838 NA10839 NA10846 NA10847 NA10851 NA10854 NA10855 NA10856 NA10857
    J'aimerai faire une expression régulière pour récupérer TOUTES les références NA...., le problème c'est que tout mes fichiers n'ont pas le même nombre de référence. Comment puis je faire pour faire un truc du genre tant qu'il y a NA\d* récupere moi ces valeurs??

    Merci de votre aide
    Si après NA tu as que des chiffres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/perl
     
    use warnings;use strict;
     
    my @na = grep { /NA\d{5}/ } `cat fichier.txt`;
    lami20j

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    la il les concatene dans une chaine
    si tu les veux dans un tableau il suffit que tu les y push
    apres le probleme avec l'exemple donné c'est qu'il ne choppe qu'une seul NA par ligne (et si ca se trouve tout est sur la meme ligne dans ton fichier...)

    (et en plsu enf ait il ne faisait pas de capture, mais bon c'est le principe)

    EDIT: je ne parle pas de la solution de l'ami lami, mais de la premiere reponse

    tu peux faire ca (non testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    open(my $fh, '<', $file) or die $!;
    my $content = do {local $/; <$fh>}; # slurp
    close $fh;
    my @liste = $content =~ /\b(NA\d{5})\b/g;
    print join("\n", @liste);

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Oui tout a fait, toutes mes références sont sur une même ligne donc cela ne marche pas

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    le bout de code que je t'ai fillé il doit marcher normalement

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Et ben cela m'écrit rien dans ma console.
    Je test un truc dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @ref =();
    @ref = $_ =~ /(NA\d+)/g;
    while (@ref){print @ref;}
    Mais c'est pas encore cela.

    Merci de votre aide cela fait plaisir....

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Si c'est bon cela marche .
    La boucle while n'est pas utile.
    Quand je fait un print @ref, j'ai toutes mes références.

    Merci

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    bizare, je viens de tester chez moi, en mettant l'exemple de fichier source que tu a donné dans un fichier, a ca marche nikel

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Oui tout a fait , j'avais fait une erreur dans mon copier coller, désolé.
    Merci de votre aide, c'est sympas.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,
    Citation Envoyé par lami20j
    Salut,Si après NA tu as que des chiffres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/perl
     
    use warnings;use strict;
     
    my @na = grep { /NA\d{5}/ } `cat fichier.txt`;
    lami20j
    Corréction de ma version (mea culpa )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/perl
    #
    use warnings;use strict;
     
    my @na = grep { /\bNA/ } split /\s+/,`cat fichier.txt`;
    print @na+0,"\n";
    lami20j

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

Discussions similaires

  1. Besoin d'aide pour les expressions régulieres
    Par brahim94 dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2009, 09h31
  2. Réponses: 3
    Dernier message: 12/06/2009, 09h16
  3. [RegEx] Aide pour expression réglière
    Par chtom dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2008, 16h49
  4. Formatage d'une date a l'aide d'expression réguliere
    Par sunshine2004 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 10/04/2008, 22h45
  5. [RegEx] aide pour une expression regulière
    Par hugo123 dans le forum Langage
    Réponses: 5
    Dernier message: 24/11/2005, 15h41

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