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 :

Probleme de test


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 Probleme de test
    Bonjour,

    je voudrais demander comment puis je faire pour sauter les lignes,exemple:
    je prends les Id a a chaque fois par exemple la premiere ligne "32_1_CBOZ_CBPA", et si je retrouve cet id je saute la ligne et je prends un autre qui differe, je ne sais pas je voulais faire un hash mais je ne sais pas ou mettre le test dans mon code? merci

    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
     
     
    #!/usr/local/bin/perl
    my %done = 1;
    my %hash=();
    my %hash2=();
     
    open (DESC2, "output_cv2");
    while(<DESC2>){
    	chomp;
    	my ($id,$coord1,$coord2)=(split/\t/)[9,-1,-3];
    	$done=$id;
    	my @exon1=();
    	my @blocsize1=();
    	foreach my $exon (split/,/,$coord2){
    		 my ($s)=split(/\,/,$exon);
    		 push @exon1,($s);
    		 }
    	foreach my $blocsize (split/,/,$coord1){
    		  my ($L)=split(/\,/,$blocsize);
    		  push @blocsize1,($L);
    		 }
    	for (my $i =0; $i<$#blocsize1; $i++){
    		my $e=$exon1[$i]+ $blocsize1[$i];
    		$hash{$id}=$e;
    		$hash2{$id}=$s;
    		}
    	print $id,"\t",$hash{$id}-$hash2{$id},"\n";
     
     
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    3459	0	0	0	0	0	17	2500	-	32_1_CBOZ_CBPA	3459	0	3459	C169-scaffold_4	2986206	2937909	2943868	18	52,49,80,253,77,209,85,1175,211,144,143,149,155,98,191,68,157,163	0,52,101,181,434,511,720,805,1980,2191,2335,2478,2627,2782,2880,3071,3139,3296	2937909,2938112,2938302,2938459,2938807,2938997,2939313,2939526,2940879,2941234,2941502,2941803,2942057,2942325,2942581,2942897,2943102,2943705,
    2650	0	0	0	0	0	7	1511	+	34_2_CBOZ_CBPA	2650	0	2650	C169-scaffold_7	2484457	1251713	1255874	8	362,214,176,270,1348,116,145,19	0,362,576,752,1022,2370,2486,2631	1251713,1252387,1252724,1253180,1253742,1255202,1255459,1255855,
    2519	0	0	0	0	0	9	3883	-	46_3_CBOZ_CBPA	2519	0	2519	C169-scaffold_8	1964347	1172240	1178642	10	897,179,208,164,220,154,155,255,192,95	0,897,1076,1284,1448,1668,1822,1977,2232,2424	1172240,1173512,1174129,1174643,1175214,1175752,1176302,1176714,1177222,1178547,
    2327	0	0	0	0	0	7	2195	-	108_4_CBOZ_CBPA	2327	0	2327	C169-scaffold_15	1434801	1007548	1012070	8	157,171,100,188,144,185,102,1280	0,157,328,428,616,760,945,1047	1007548,1008029,1008488,1008853,1009441,1009941,1010385,1010790,
    2291	0	0	0	0	0	7	1129	-	51_1_CBOZ_CBPA	2291	0	2291	C169-scaffold_22	985987	948089	951509	8	300,151,176,150,99,117,153,1145	0,300,451,627,777,876,993,1146	948089,948749,948985,949313,949572,949799,950039,950364,
    2193	6	0	0	1	12	13	6015	+	29_1_CBOZ_CBPA	2211	0	2211	C169-scaffold_19	1345290	317921	326135	14	304,146,36,97,121,146,215,160,120,149,175,184,61,285	0,304,450,486,583,704,850,1065,1225,1345,1494,1669,1853,1926	317921,318593,319051,319265,319958,320700,321351,322148,322684,323378,323923,324696,325364,325850,
    2060	0	0	0	0	0	8	1651	+	134_1_CBOZ_CBPA	2060	0	2060	C169-scaffold_16	1433446	531474	535185	9	78,17,76,124,85,219,943,154,364	0,78,95,171,295,380,599,1542,1696	531474,531641,531772,531999,532235,532697,533260,534475,534821,

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    Je dirai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my %hashId;
    while (my $l = <DESC2>) {
      my @champs = split("\t", $l);
      next if defined($hashId{$champs[9]});
      $hashId{$champs[9]} = 1;
      ...
    }

  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
    OK je pense que c'est bon, merci .
    comme d' habitude vous maitrisez

  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
    Par contre , j'ai un petit souci je voulais pas ouvrir un topic pour cela,
    je voudrais a chaque fois faire la soustraction de couple, par exemple:
    pour L'id: 32_1_CBOZ_CBPA je recupere les deux champs -1 et -3.
    Je mets dans deux tableaux differents, ensuite je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $e=$exon1[$i]+ $blocsize1[$i];
    pour obtenir e, par la suite ce qui va me permettre de faire e-s, mais c'est la que j'ai mon souci, car:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    2937909,2938112,2938302,2938459,2938807,2938997,2939313,2939526,2940879,2941234,2941502,2941803,2942057,2942325,2942581,2942897,2943102,2943705,
    je voudrais pour chaque e obtenue faire la soustraction avec le s suivant:
    cest a dire pour le premier e je voudrais faire e-2938112.
    Si je resume:
    au debut je fais Ex=Sx+Lx ~ Ex=2937909+52
    ce que je veux faire par la suite C'est Ex-Sy~Ex-2938112 et ainsi de suite pour chaque fois, en faisant attention que le dernier e calcule , je ne peux pas faire de e-s car il n'existe pas de s.

    Merci

    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
    40
    41
    42
    43
     
     
    #!/usr/local/bin/perl
    my %done = 1;
    my %hash=();
    my %hash2=();
    my %hashId;
    open (DESC2, "output_cv2");
    while(<DESC2>){
    	chomp;
    	my %hashId;
    	my @champs = split("\t", $l);
      	next if defined($hashId{$champs[9]});
      	$hashId{$champs[9]} = 1;
    	my ($id,$coord1,$coord2)=(split/\t/)[9,-1,-3];
    	my @exon1=();
    	my @blocsize1=();
    	foreach my $exon (split/,/,$coord2){
    		 my ($s)=split(/\,/,$exon);
    		 push @exon1,($s);
    		 }
    	foreach my $blocsize (split/,/,$coord1){
    		  my ($L)=split(/\,/,$blocsize);
    		  push @blocsize1,($L);
    		 }
    	for (my $i =0; $i<$#blocsize1; $i++){
    		my $e=$exon1[$i]+ $blocsize1[$i];
    		$hash{$id}=$e;
     
    	for (my $i =1; $i<$#exon1; $i++){
    		$hash2{$id}=$exon1[$i];
    		$hash2{$id},"\n";
    		}
    		print join("\t",$id,abs($hash{$id}-$hash2{$id}))."\n";
    		}
     
     
     
     
     
     
     
    }

  5. #5
    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
    J'ai trouve mon erreur, sauf que j'ai des abberations lorsque j'ai un couple seul, en plus j'ai fait le calcul a la main je trouve pour le premier 151 , alors que mon programme me donne 157:

    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
     
    #!/usr/local/bin/perl
    my %done = 1;
    my %hash=();
    my %hash2=();
    my %hashId=();
    open (DESC2, "output_cv2");
    while(<DESC2>){
    	chomp;
    	my %hashId;
    	my @champs = split("\t", $l);
      	next if defined($hashId{$champs[9]});
      	$hashId{$champs[9]} = 1;
    	my ($id,$coord1,$coord2)=(split/\t/)[9,-1,-3];
    	my @exon1=();
    	my @blocsize1=();
    	foreach my $exon (split/,/,$coord2){
    		 my ($s)=split(/\,/,$exon);
    		 push @exon1,($s);
    		 }
    	foreach my $blocsize (split/,/,$coord1){
    		  my ($L)=split(/\,/,$blocsize);
    		  push @blocsize1,($L);
    		 }
    	for (my $i =0; $i<$#blocsize1; $i++){
    		my $e=$exon1[$i]+ $blocsize1[$i];
    		$hash{$id}=$e;
     
    		}
     
    	for (my $i =1; $i<$#blocsize1; $i++){
    		$hash2{$id}=$blocsize1[$i];
     
     
    		}
    		print join("\t",$id,abs($hash2{$id}-$hash{$id}))."\n";
    		}
    PS: je viens de m'apercevoir qu'il me fait que pour le premier et il ne continu pas pour la suite pour un id donne...

  6. #6
    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
    Je me rexxplique je pense que je me suis pas tres bien explique:
    le split -3 me permet d'avoir Sx,Sy,Sz qui sont des start de segements, ensuite le split-1 Lx,Ly,Lz qui sont des longueurs par exemple, ensuite pour avoir la fin du segment je fais Ex=Sx+Lx ,ainsi de suite pour les autres,et a la fin ce que je veux faire c'est connaitre la longueur qui separe deux segemnts.
    Donc je veux faire a la fin Sy-Ex et Sz-Ey.

    Voila

    merci

Discussions similaires

  1. [langage] probleme sur test d'une variable
    Par Melvine dans le forum Langage
    Réponses: 11
    Dernier message: 25/10/2006, 19h31
  2. Probleme de test de profondeur
    Par jcloupgarou dans le forum OpenGL
    Réponses: 3
    Dernier message: 10/07/2006, 11h52
  3. probleme de test d'enregistrement
    Par stomerfull dans le forum Langage
    Réponses: 1
    Dernier message: 28/06/2006, 16h05
  4. probleme de teste sur recordset
    Par julio_097 dans le forum ASP
    Réponses: 3
    Dernier message: 18/07/2005, 11h02
  5. Probleme de test dans un boucle
    Par PrinceMaster77 dans le forum ASP
    Réponses: 14
    Dernier message: 15/06/2004, 12h32

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