Bonjour,

voila je suis en deuxième année de DUT bio-info sur Aurillac et pour mon ptut je dois faire un programme dont vous avez un bout dessous. ce programme a pour but dans un premier temps de créer des dossiers et des fichiers au nom des enzymes, ces noms étant contenus dans un fichier texte. jusque la pas de problème. dans un second temps le programme devrait me permettre de récupéré des infos dans un fichier texte relatif aux noms des enzymes. j'arrive à récupérer le Gi, la seq et la description mais je n'arrive pas à récupérer le CDS (plus précisément le /coded_by...) mon script ne marche pas. Pourriez-vous m'aider svp?!
je tenais a remercier jasmine80 qui grâce à son tuto et à ses réponse sur le forum m'a beaucoup aidé.
Merci d'avance


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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#!/usr/bin/perl
 
use strict; # appelle pragma
use warnings;  # appelle pragma, warnings, opère à la compilation une vérification de la syntaxe sur de nombreux points qui peuvent facilement passer inaperçus aux yeux du développeurs mais se révèlent souvent fatals à l'exécution
use Cwd;  #donne le chemin absolu du répertoire courant ou est lancée le programme
use Bio::DB::GenBank; #sert dans la partie Genbank
use Bio::SeqIO;
 
# LES VARIABLES........................................
 
 
# variables de la premières partie 
# pour les dossiers
my $reponse;#contient la saisie au clavier de la réponse à la question avant le while
my $dossier_courant = getcwd(); #enregistre le chemin du repertoire courant
my $adress;#met le chemin du repertoire courant dans adress quelque soit la reponse a la question
my $nom;#contient le nom de l'enzyme du fichier et est reinitialiser a chaque execussion de boucle while
 
#variables pour la recherche sur genbank à partir du fichier contenant le nom des enzymes
my $name;#recupere le nom de l'enzyme, même fonction que le $nom de la partie precedente 
my $db="Protein";
my $gb = new Bio::DB::GenBank; #charge le module GenBank
my $query_string;
my $query;
my $stream;
my $i;
my $info;
my $Gi;
my $seq;
my $def;
my $info2;
my @name;
 
#variables pour la recherche sur genebank a partir du numero d'accesion recupere d'internet et contenue dans le fichier avec les info sur l'enzyme et la souche
my $gb2 = new Bio::DB::GenBank;
my $ligne;
my @ligne;
my $accession;
my @ligne2;
my $ligne2;
my @ligne3;
my $ligne3;
my $query_string2;
my $query2;
my $stream2;
my $i2;
my $seq2;
my @accession;
my @tabfeat;
my $feat;
 
# variable qui servent dans la comparaison des deux fichiers
my $seqligne;
my @seq10;
my $seqligne_sans_espace;
my $seqgood; 
my $seqgene; 
my $n;
my $a;
 
 
#création des dossiers
A:
print " Voulez-vous mettre les dossiers au meme endroit (meme chemin) que la base de donnée?---->oui ou non\n\n.
        Attention si un dossier de meme nom existe deja, il sera ecrase\n\n";#demande
$reponse=<STDIN>;#met dans variable la reponse
print "\n\n";
chomp $reponse;#enleve le dernier caractere
print "dossier courant : $dossier_courant\n\n";#donne le chemin du dossier courant
open (FILE, "$dossier_courant\\liste_enzyme.txt") || die "connot open liste_enzyme.txt";#ouvre le fichier #l'application doit être au même endroit que la base snn le dossier courant ne sera pas le même et le prog prendra le dossier courant de l'application et non celui de la bdd
while (<FILE>)
{
	if($_=~/^\D/) # si commence par une lettre
		{
		chomp $_;#enleve le dernier caractère de fin de ligne
 
		if ($reponse=~/oui/||$reponse=~/OUI/) #si reponse oui a la question avant la boucle while
			{
			mkdir ("$dossier_courant"."/"."$_"); #creation au niveau du dossier courant d'un repertoire au nom de l'enzyme correspondant à $_
			$adress="$dossier_courant";#recuperation de l'adresse pour ne pas avoir de probleme plus bas
			#print "test ok\n";
			}
 
		elsif ($reponse=~/non/||$reponse=~/NON/)#si reponse non a la question avant la boucle while
			{
			goto B;#va a B: directement plus bas
			}
 
		else # en cas d'une autre reponse
			{
			print "          oui ou non rien d'autre!\n\n";#message d'avertissement
			goto A;#revient a A: plus haut
			}
		}
 
	else #si autre que des lettres dans le fichiers avec le nom des enzymes
		{
		print "\n\n";
		print "Il y a un probleme avec le fichier contenant le nom des enzymes. Verifier qu'il n'y ait que des noms.\n\n";
		}
}
 
B:
if ($reponse=~/non/||$reponse=~/NON/) #reprise hors while si reponse non
	{
	print "Ou souhaitez-vous les mettre?\n\n";#demande le nouveau chemin
	$adress=<STDIN>;#saisi de la nouvelle adresse complete
	chomp $adress;#enleve le dernier caractere
	while (<FILE>)
		{
		if ($_=~/^\D/)
			{
			chomp $_;
			mkdir("$adress"."/"."$_");#creation du repertoire au nom de l'enzyme a $adress
			}
 
		else
			{
			print "\n\n";
			print "Il y a un probleme avec le fichier contenant le nom des enzymes. Verifier qu'il n'y ait que des noms.\n\n";
			}
		}
	}
 
print "vous avez mis vos dossiers a\n\n$adress\n\n";#impression du chemin ou se trouve le repertoire
 
#ok ici
 
# traite le fichier text et va chercher sur GenBank l'enzyme et en retir les infos que l'on souhaite que l'on met dans un fichier_enzyme  (test si trouve pas enzyme) 
open (FILE, "$dossier_courant\\liste_enzyme.txt") || die "connot open liste_enzyme.txt";#doit le réouvrir
while (<FILE>)
{
	if($_=~/^\D/)
		{
		chomp $_;
		$name=$_;
		}
	open (FILE2, ">$dossier_courant\\$name\\$name.txt")|| die "cannot open file2";
	push (@name, $name);
	$query_string="$name"; #[organisme] a voir si il le faut
	print "$query_string\n\n";
	$gb->request_format('fasta') || die "pas de bol";
 
	$query = Bio::DB::Query::GenBank->new(   -db=>$db,
													-query=>$query_string,
												) || die "pas de bol 2";
 
	$stream = $gb->get_Stream_by_query($query) || die "pas de bol 3";
 
	$i=0;
		#recherches sur genbank et enregistrement dans le fichier
       while ($info = $stream->next_seq) #recupere les info
		{
		$Gi = $info->primary_id();
		$seq = $info->seq;
		$def = $info->description;
		$i++;#incremente pour mettre dans le fichier
		print FILE2 "$i : $Gi\n$def\n$seq\n";
		#push(@ListeGi, $Gi);
		}
		@tabfeat= $info->get_SeqFeatures();
		foreach $feat (@tabfeat)
	{
         #recuperation du CDS
	if ($feat->primary_tag() eq 'CDS')
		{
			#print FILE2 "coucou";#test
			print FILE2 "Gène : ",$feat->get_tag_values('gene'),"\n";
			print FILE2 "Product : ",$feat->get_tag_values('product'),"\n\n\n";
		}
 
}
 
}