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

Bioinformatique Perl Discussion :

suppression d'une partie de blat


Sujet :

Bioinformatique Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 16
    Points
    16
    Par défaut suppression d'une partie de blat
    Slt tt le monde!
    je dois développer un programme en bioinfo en perl!! Pour cela, j'ai du effectuer un blat!! Le petit soucis est que j'obtiens un fichier (blat_chicken.out) avec un tableau dont la 11 ème colonne contient le Q name avec :

    gi|71895710|ref|NM_001031511.1|Gallus

    Or c'est trop long et le nom du transcrit, c'est juste NM_001031511.1

    Alors cette ligne me déplace tout dans le tableau, donc il n'y a pas d'alignement!

    Donc je voudrais faire un ptit programme en perl qui me permettrait de suprimer les mots avant et après le nom du transcrit. J'ai pensé à remplacer mais le problème c'est que le numéro diffère pour chaque ligne!
    Quelqu'un aurait une idée du programme à faire? (bien que je sais quoi faire mais vu que je ne suis qu'une débutante en perl, je ne sais pas comment l'écrire!)

    Merci

  2. #2
    Membre habitué Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Points : 177
    Points
    177
    Par défaut
    Une petite expression reguliere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $string =~ s/(NM_[\d\.]*)/$1/
    Si je me suis pas trompé ca te remplace la ligne par l'identifiant que tu souhaite.

    (bon ca c'est juste l'expression, faut d'abord parser le fichier et tout et tout)
    Science sans conscience n'est que ruine de l'âme

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Merci, j'ai écrit ce code mais il me met une erreur à /home/miv
    Bareword found where operator expected at essai_blat.pl line 5, near "/home/miv" (Missing operator before v?)
    syntax error at essai_blat.pl line 5, near "/home/miv"
    de quoi s'agit il?

    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
     
    #! /usr/bin/perl
     
    use strict;
     
    my $blat_file = /home/miv/Stage/chr2.out;
     
    open (F, $blat_file);
     
    while(my $line = <F>) {
    	if ($line =~ /^[0-9]/) {
    		my @cur_fields = split("\t", $line);
    		$cur_fields[9] =~ s/(NM_[\d\.]*)/$1/;
    	}
    }
    close F;
    En même tps, voyez vous une autre erreur dans mon script?

  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,

    au lieu de
    my $blat_file = /home/miv/Stage/chr2.out;
    mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $blat_file = '/home/miv/Stage/chr2.out';
    --
    lami20j

  5. #5
    Membre habitué Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Points : 177
    Points
    177
    Par défaut
    L'erreur a rien a voir avec le code que je t'ai donné
    Tu as oublié les double quote ("") en declarant ta variable de fichier my $blat_file

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $blat_file = "/home/miv/Stage/chr2.out";
    Edit : rah suis trop lent !
    Science sans conscience n'est que ruine de l'âme

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    En effet, il n'y a plus d'erreur mais en fait,ça marche pas!
    que manque-t'il dans mon code ci dessus (à part les doubles cotes)?

  7. #7
    Membre habitué Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Points : 177
    Points
    177
    Par défaut
    Mon expression est peut-etre pas bonne, j'ai un doute sur [\d\.]*
    Science sans conscience n'est que ruine de l'âme

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    si si ton expressioon est juste, g fait un print!! bon ça marche! maintenant il faut que je mette mon nouveau tableau dans un autre fichier! Voilà mon code :
    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
    19
     
     #! /usr/bin/perl
     
    use strict;
     
    my $blat_file = "/home/miv/Stage/chr2.out";
     
    open (F, $blat_file);
    my $var;
    my $champs;
    while(my $line = <F>) {
    	if ($line =~ /^[0-9]/) {
    		my @cur_fields = split("\t", $line);
    		$cur_fields[9] =~ /(NM_[\d\.]+)/;
    		$cur_fields[9] = $1;
    		print join("\t",@cur_fields)."\n";
    	}
    }
    close F;
    donc ma question est comment je dois faire pour mettre tout ça dans un nouveau fichier??

  9. #9
    Membre habitué Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Points : 177
    Points
    177
    Par défaut
    (les balises code par pitié )

    Deja remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $cur_fields[9] =~ /(NM_[\d\.]+)/;
    $cur_fields[9] = $1;
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $cur_fields[9] =~ s/(NM_[\d\.]+)/$1/;
    Science sans conscience n'est que ruine de l'âme

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    ça veut pas marcher comme ça!

  11. #11
    Membre habitué Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Points : 177
    Points
    177
    Par défaut
    Ben ca devrait
    Pas grave c'est juste plus lisible


    Si tu veux mettre tout ce que tu as matché dans un nouveau fichier c'est tout bete, fais le au fur et a mesure :

    [code]
    open NOUVEAU, ">le_nom_du_fichier" or die "Erreur lors de la creation du nouveau fichier";
    while (...){ #ta boucle de lecture
    if (...){
    ....
    print (NOUVEAU $ligne); #ta ligne modifiee
    }
    else {
    print (NOUVEAU $ligne); #ta ligne pas modifiee si tu veux toutes les lignes
    }
    }
    close NOUVEAU;
    [\code]


    PS: ma balise code veux pas se fermer Oo
    Science sans conscience n'est que ruine de l'âme

  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,

    essaie avec
    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
     
    #! /usr/bin/perl
    use strict;use warnings;
     
    my $blat_file = '/home/miv/Stage/chr2.out';
    open F, $blat_file or die "E/S : $!\n";
    open W, ">$resultat" or die "E/S : $!\n";
     
    while(my $line = <F>) {
      push @cur_fields,[split /\t/], $line if $line =~ /^\d/;
    }
     
    map { s/(NM_[\d\.]*)/$1/ } @$_[9] foreach @cur_fields;
    print W "@$_\n" foreach @cur_fields;
     
    close F;
    close W;
    --
    lami20j

  13. #13
    Membre habitué Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Points : 177
    Points
    177
    Par défaut
    En effet le print a la fin est plus propre

    Mais le probleme c'est que la elle va recupérer juste son identifiant sans la sequence d'ou mon print conditionnel (que tu peux remplacer par un push du tableau contenant les lignes a ecrire)
    Science sans conscience n'est que ruine de l'âme

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Merci bcp ça marche!!

  15. #15
    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 minus
    (les balises code par pitié )

    Deja remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $cur_fields[9] =~ /(NM_[\d\.]+)/;
    $cur_fields[9] = $1;
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $cur_fields[9] =~ s/(NM_[\d\.]+)/$1/;
    Peut-être que ça marcherait mieux avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cur_fields[9] =~ s/.*(NM_[\d\.]+).*/$1/;
    qui fait effectivement la même chose que le premier code contrairement au tien (relis bien les deux)...

    --
    Jedaï

  16. #16
    Membre habitué Avatar de minus
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 153
    Points : 177
    Points
    177
    Par défaut
    Rah oui en effet ca marche tout de suite mieux
    Science sans conscience n'est que ruine de l'âme

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

Discussions similaires

  1. suppression d'une partie de type string
    Par olivier59820 dans le forum MATLAB
    Réponses: 2
    Dernier message: 30/06/2011, 10h30
  2. Suppression d'une partie du nom de l'onglet
    Par damien29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/05/2011, 16h41
  3. suppression d une partie de l'url
    Par mustapha_aim dans le forum Langage
    Réponses: 2
    Dernier message: 15/07/2010, 22h09
  4. Suppression d'une partie ciblée d'une surface
    Par Kafkana dans le forum MATLAB
    Réponses: 0
    Dernier message: 20/05/2010, 09h10
  5. suppression d'une partie d'un champs
    Par ntahi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/07/2007, 18h47

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