2011-11-25 3 views
3

Disons que je chaîne de longueur multiple de 3.découper une chaîne en longueur égale Chunk en Perl

my $seq = "CTTCGAATT"; # in this case length of 9 

Est-il possible que je peux le diviser en longueur égale de 3? telle qu'à la fin je ce tableau:

$VAR = ["CTT", "CGA", "ATT"]; 
+1

Crossposted à PerlMonks. Là, trois solutions ont été fournies, avec des benchmarks démontrant que la méthode de décompression est un bon choix. http://www.perlmonks.org/?node_id=939987 – DavidO

Répondre

3

itérer sur des multiples de trois, en utilisant substr pour obtenir des pièces à push dans une liste.

+0

Merci. En pratique, j'ai environ 10 millions de cette chaîne à casser. Substr peut-être trop lent? – neversaint

+0

Essayez-le. S'il est lent, lisez le fichier caractère par caractère jusqu'à ce que vous remplissiez un tampon que vous insérez dans une liste. Répétez jusqu'à EOF. –

1
my $str = join '', map { ('A','T','C','G')[ rand 4 ] } 0 .. 900 ; # Random string 

my @codons = $str =~ /[ACTG]{3}/g; # Process in chunks of three 
            # '/g' flag necessary 

print 'Size of @codons array : ', 
     scalar @codons;    # '300' 
Questions connexes