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";
}
}
} |
Partager