Bonjour, pour mon travail un programmeur m'a fait ce petit programme en Perl le pb est que le pg ne fait pas reellement ce que je veux.Vu que je suis debutant c'est tres complique de le modifier pour reparer l'erreur.
Ce que je voudrais c'est extraire des donnees d'une database qui se decompose de la maniere suivante:
1/Informations sur la sequence
2/Localisation des differentes parties de la sequence
3/Sequence a proprement parle.
Ce que je souhaite,c'est extraire une partie de l'info pour connaitre d'ou provient la sequence,de prendre chaque partie de la sequence a part et ensuite de prendre la sequence complete encore a part.
Voici le programme que j'ai(j'ai egalement le fichier data lie a ce programme) pourriew vous me dire si deja il y a une erreur dans ce programme SVP...
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121 #!/usr/bin/perl # oblige utiliser la dÈclaration de variable pour chaque nouvelle variable (my $variable;) use strict; # explique les bugs use warnings; # le path du fichier dans une variable my $genbank = "all_GenBank.txt"; # j'ouvre le fichier (||) ou je meurs open (FILE, "$genbank") || die "salop\n"; # je stoque chaque ligne du fichier comme une string dans un array (liste) my @lines_gb = <FILE>; close FILE; ## dÈclaration des variables que je vais utiliser my $line; my $locus; my $definition; my $translation = 0; my $seq; my $complete_seq; my $start_cds; my $start; my $end; my $product = ""; my $protein_id; my $prot_seq; # boucle pour chaque ligne du fichier foreach $line (@lines_gb){ # si la string de $line match avec un truc qui commence (^) par "LOCUS" if ($line =~ m/^LOCUS/){ # je split ma string en liste et je prend le deuxiËme ÈlÈment de la liste ([1] parceque Áa commence zero) $locus = (split(/\s+/,$line))[1]; # j'enlËve le caractËre invisible de saut de ligne de ma string chomp $locus; } if ($line =~ m/^DEFINITION/){ $definition = $line; # definition est egal la ligne qui commence par DEFINITION et je substitue DEFINITION du dÈbut et tous les espaces juste aprËs (\s 1 esapce, \s+ groupe d'espaces ou de tabulateurs) $definition =~ s/^DEFINITION\s+//; # je virre (remplace par rien) partir de ", complete et tout autre caractËre aprËs" $definition =~ s/, complete.*//; # je remplace les espaces par "_" le "g" c'est pour qu'il le fasse pas juste avec le premier, mais avec tous $definition =~ s/ /_/g; chomp $definition; # je crÈ le repertoire qui portera le nom du virus mkdir "data/$definition"; } # si ya "translation dans la ligne ou si la variable translation est Ègale 1" if (($line =~ m/\/translation\=\"/)|($translation == 1)){ # je dÈfini translation 1 $translation = 1; $seq = $line; #je remplace tout ce qu'il y a avant translation et translation et "=" et """, le "\" c'est pour qu'il sache qu'on parle d'un caractËre normal, pas d'un truc special comme .* $seq =~ s/.*\/translation\=\"//; $seq =~ s/\s+//g; chomp $seq; # je rajoute la string $seq $complete_seq $complete_seq = $complete_seq.$seq; # c'est la fin de la sÈquence je remet translation 0 if ($seq =~ m /\"/){ $translation =0; $complete_seq =~ s/\"//; } } if ($line =~ m/3\'UTR/){ # fin de la sÈquence, on initialise... $complete_seq = ""; } # je garde les valeur de dÈbut et de fin de la protÈine if ($line=~ m/mat\_peptide/){ $start = $line; $start =~ s/.*mat\_peptide\s+//; $start =~ s/\s+//g; $end = $start; $start =~ s/\.\..*//; $end =~ s/.*\.\.//; chomp $end; print "$start $end\n"; } # je garde la valeur de dÈbut de la CDS if ($line=~ m/ CDS /){ $start_cds = $line; $start_cds =~ s/.*CDS\s+//; $start_cds =~ s/\s+//g; $start_cds =~ s/\.\..*//; } # je garde le nom de proteine et l'id if ($line=~ m/\/product/){ $product = $line; $product =~ s/.*\/product\=\"//; $product =~ s/\"\n//g; $product =~ s/ /_/g; } # j'Ècris dans un fichier le nom et l'id, et la sÈquence de la protÈine if (($line=~ m/\/protein_id/)&($product !~ m/polyprotein/)){ $protein_id = $line; $protein_id =~ s/.*\/protein_id\=\"//; $protein_id =~ s/\"\n//g; $protein_id =~ s/ /_/g; # j'ouvre le fichier de sortie open (FILE, ">data/$definition/$product"); print FILE "\>$product\t$protein_id\n"; my $temp = $complete_seq; # et oui c'est les coordonnÈes nuclÈiques... my $tmpstart = int(($start-$start_cds)/3); my $tmpend = (($end-$start_cds+1)/3)-$tmpstart; # substring chope la strin qui va de $tmpstart et qui fait $tmpend de long $prot_seq = substr($temp, $tmpstart, $tmpend); print FILE "$prot_seq\n"; close FILE; } } # \n retour la ligne print "tadam!!!\n\n"
Partager