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 :

Parcourir fichier et regroupement


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 133
    Par défaut Parcourir fichier et regroupement
    Bonjour je suis nouveau en perl,
    je dois a partir d'un fichier (ceci est un petit bout du fichier):
    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
    20
    21
     
    C169v2-04488	Aster-06787
    C169v2-04487	Aster-06725
    C169v2-04480	Aster-06724
    C169v2-04481	Aster-06792
    C169v2-03069	Aster-04749
    C169v2-03068	Aster-01309
    C169v2-03061	Aster-06908
    C169v2-03060	Aster-04730
    C169v2-03067	Aster-04746
    C169v2-03066	Aster-04710
    C169v2-03065	Aster-04711
    C169v2-03064	Aster-05029
    C169v2-03285	Aster-01180
    C169v2-03283	Aster-04356
    C169v2-03282	Aster-01211
    C169v2-03281	Aster-05299
    C169v2-03280	Aster-01473
    C169v2-03289	Aster-06954
    C169v2-07315	Aster-00866
    C169v2-07314	Aster-00182
    Donc le but est de fixer les C169-***, car je vais dois regarder si deux genes qui se suivent par exemple C169v2-04480 C169v2-04481 n'ont pas de gens orthologues qui se suivent aussi même si ils sont renverses, par exemple si j'avais deux gènes Aster Aster -0002 puis 0001 ca marche .
    Donc je voulais savoir je voulais faire un hash qui contiendrait tous les CV et leurs asters puis je pars du premier Cv-** puis je compare si j'ai pas un CV-**** plus grand que un ou plus petit puis je regarde leurs gènes orthologues.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!/usr/local/bin/perl
    open IN, 'intron2.txt';
    while(<IN>){
    	my	($A,$B)=(split/\t/);	
    	  %hash;
    	  $hash{$A}=$B;	
     
    }
    Donc la je ne sais pas comment parcourir le hash en fixant la premiere valeur de CV-** lui ajouter -1 verfier si il existe la valeur obtenue dans le hash, si il existe je verfie si le aster coorespondant du premier Cv et de celui que je viens de regarder ce suivent ou pas sinon je continue en faisant +1 , et ainsi de suite.

    P.S:Je refais l'exemple si je prends le premier C169v2-04488 je lui ajoute +1 je trouve C169v2-04489 je regarde si ce chiffre existe si il existe je vais regarder par la suite si le Aster-06787 correspond soit Aster-06786 ou Aster-06788 si ca ne correspond pas je regarde -1 je fais la meme chose.
    Si j'ai fini je passe a l'autre.


    merci

  2. #2
    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
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
     
    my %hash = (
    'C169v2-03069'	=>	'Aster-04749',
    'C169v2-03068'	=>	'Aster-01309',
    'C169v2-03061'	=>	'Aster-06908',
    'C169v2-03060'	=>	'Aster-04730',
    'C169v2-03067'	=>	'Aster-04746',
    'C169v2-03066'	=>	'C169v2-03065',
    'Aster-04711'	=>	'Aster-04712',
     
    );
     
    while  ( my ($k, $v) = each %hash){
     
    	my ($gene_k, $num_k) = $k =~ m/^(\w+)-(\d+)$/;
    	my ($gene_v, $num_v) = $v =~ m/^(\w+)-(\d+)$/;
     
    	if ((abs ($num_k - $num_v) == 1) && ($gene_k eq $gene_v) ){
     
    		print "$k\t$v\n";
     
    	}
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 133
    Par défaut
    Bonjour,
    en fait je rajoute car je n'arrive toujours pas a régler mon problème, en fait
    je recommence mon problème, je pars d'un fichier (mis en pièce jointe).
    Je dois regarder les differents couples de C-**** qui se suivent et regarder si les couples Aster-*** qui sont en face d'eux , eux aussi se suivent,
    exemple:
    C169v2-03066 Aster-04710
    C169v2-03065 Aster-04711
    on a bien C169v2-03065 qui suit C169v2-0306 et en face les Aster correspondant pareil, par contre il n y a pas de restriction pour les Aster, je m'explique le suivis peut etre different ca ne pose pas de soucis.Comme dans cet exemple C169v2-03065 Aster-04711
    C169v2-03066 Aster-04710

    Ce qui compte le plus c'est le suivi.

    J'ai commence un code en mettant dans un tableau car je pense que c'est le mieux pour la suite de mon programme:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
     #!/usr/local/bin/perl
    open my $fh, '<', 'intron2.txt' or die;
     
    # liste des positions du gène C
    my @C_array;
     
    # liste des positions du gène Aster
    my @Aster_array;
     
    while ( my $l = <$fh>){
     
    	if ($l =~ m/C169v2-(\d+)\tAster-(\d+)/){
    		push (@C_array, $1);
    		push (@Aster_array, $2);
    	}
    }
     
    for (my $i =0; $i<$#C_array; $i++){
     
    	# on prend les gènes C deux par deux (j'ai gardé ta nomination A et B))
     
    	my $A = $C_array[$i];
    	my $B = $C_array[$i+1];
     
    	# on vérifie que la différence
    	# soit au plus de 1
     
    	if (abs ($A - $B) == 1){
    Saut que ca marche pas je pense que mon if n'est pas bon ?
    Est ce que vous auriez une idée pour me débloquer merci.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 133
    Par défaut
    Voci un code que j'ai refait mais je pense pas que ca soit juste,
    en plus je veux ecrire les couples Cv-*** Aster-*** comme dans le fichier, j'arrive pas a les regrouper
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     #!/usr/local/bin/perl
     
    my $A=+1;
    my $B=-1;
    open my $fh, '<', 'intron2.txt' or die;
     
    # liste des positions du gène C
    my @C_array;
     
    # liste des positions du gène Aster
    my @Aster_array;
     
    while ( my $l = <$fh>){
     
    	if ($l =~ m/C169v2-(\d+)\tAster-(\d+)/){
    		push (@C_array, $1);
    		push (@Aster_array, $2);
    	}
    }
     
    for (my $i =0; $i<$#C_array; $i++){
     
    	# on prend les gènes C deux par deux (j'ai gardé ta nomination A et B))
     
    	my $A = $C_array[$i];
    	my $B = $C_array[$i+1];
    	my $C = $Aster_array[$i];
    	my $D = $Aster_array[$i+1];
     
    	# on vérifie que la différence
    	# soit au plus de 1
     
    	if ((abs ($A - $B) == 1) &&(abs($C-$D)==1)){
    		print "C169v2-".$A."\t"."Aster-".$C."\n" ;
     
    		print "C169v2-".$B."\t"."Aster-".$D."\n" ;
        }
    }
    Cest bon trouve, je ne sais pas si le concept ou on peut reduire mais je pense que ca marche

    merci

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

Discussions similaires

  1. Bouton parcourir / fichier
    Par kikouu dans le forum Forms
    Réponses: 6
    Dernier message: 26/04/2007, 17h16
  2. Pb Boucle VB6 pour parcourir fichier TXT en VB6
    Par C_Mila dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 24/02/2007, 12h22
  3. Petits fichiers XML regroupés dans un seul
    Par Nanji dans le forum Modules
    Réponses: 1
    Dernier message: 22/06/2006, 10h50
  4. Réponses: 6
    Dernier message: 14/04/2006, 12h18
  5. Parcourir fichier à indenter
    Par BFH dans le forum C
    Réponses: 6
    Dernier message: 26/11/2005, 13h21

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