2011-11-25 57 views
3

比方说,我有在3将一个字符串分解成相等长度块在Perl

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

多长的字符串,是有办法,我可以把它拆分成3个长度相等? 这样到底我有此数组:

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

Crossposted到Perlmonks。在那里,提供了三种解决方案,基准测试表明解压方法是一个不错的选择。 http://www.perlmonks.org/?node_id=939987 – DavidO

回答

3

遍历三的倍数,使用substr拿到件push到一个列表。

+0

谢谢。在实践中,我有大约1000万这样的字符串被打破。 Substr可能太慢? – neversaint

+0

试一试。如果速度很慢,请逐字读一遍文件,直到您填入一个缓冲区,并将其缓存到列表中。重复,直到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' 
相关问题