#!/usr/local/bin/perl # ++++++++++++++++++++++++++++++++++++++++++++++++++++ # Cree autant de fichiers qu'il y a de sequences # dans le fichier d'entree format EMBL, chaque fichier # ayant le nom de la sequence qu'il contient. # Un caractere dieze est rajoute juste avant la # sequence elle-meme (juste avant la suite des bases) # Usage: # sliceEmbl [-e] # Option: # -e: si on ne veut pas creer de fichier pour les # sequences qui contiennent "sequence unknown" dans # la rubrique SQ # ++++++++++++++++++++++++++++++++++++++++++++++++++++ # Verification: if (($#ARGV < 0 ) || ($#ARGV > 1)) { die "Usage:\n sliceEmbl [-e] file-EMBL \n"; } $exclude=0; foreach $i (0 .. $#ARGV) { if ($ARGV[$i] eq "-e") { $exclude=1; } else { $file=$ARGV[$i]; } } if ($file eq "") { die "Usage:\n sliceEmbl [-e] file-EMBL \n"; } $etat=0; open(BIGFILE,"< $file") || die "Unable to open $file.\n"; while() { $buffer=$_; # buffer contient la ligne courante de BIGFILE if ($etat==0) { ($idname,$nomfic)=split(' ',$buffer); if ($idname eq "ID") { open(SMALLFILE,"> $nomfic"); print SMALLFILE $buffer; $etat=1; } } # fin du etat=0 else { # etat!=0 if (index($buffer,"//")>=0) { close(SMALLFILE); $etat=0; } else { # on n'a pas lu "//", i.e ce n'est pas la fin de la sequence ($sq,$remain)=split(' ',$buffer); if ($sq eq "SQ") { if (($exclude==1) && (index($buffer,"Sequence unknown")>=0)) { print "Sequence ", $nomfic, " unknown \n"; close(SMALLFILE); unlink $nomfic; # on detruit le fichier qu'on avait comence $etat=0; } else { chop($buffer); # remove newline $buffer.="#\n"; # append } } # fin de sq=SQ if ($etat == 1 ) { print SMALLFILE $buffer; } } # fin de ce n'est pas la fin de la sequence } # fin etat non 0 } # fin du while close(BIGFILE);