比方说,我有在3将一个字符串分解成相等长度块在Perl
my $seq = "CTTCGAATT"; # in this case length of 9
多长的字符串,是有办法,我可以把它拆分成3个长度相等? 这样到底我有此数组:
$VAR = ["CTT", "CGA", "ATT"];
比方说,我有在3将一个字符串分解成相等长度块在Perl
my $seq = "CTTCGAATT"; # in this case length of 9
多长的字符串,是有办法,我可以把它拆分成3个长度相等? 这样到底我有此数组:
$VAR = ["CTT", "CGA", "ATT"];
看看该解决方案在How can I split a string into chunks of two characters each in Perl?
尤其是unpack
可能是有趣:
my @codons = unpack("(A3)*", $seq);
+1。好的发现... –
遍历三的倍数,使用substr
拿到件push
到一个列表。
谢谢。在实践中,我有大约1000万这样的字符串被打破。 Substr可能太慢? – neversaint
试一试。如果速度很慢,请逐字读一遍文件,直到您填入一个缓冲区,并将其缓存到列表中。重复,直到EOF。 –
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'
Crossposted到Perlmonks。在那里,提供了三种解决方案,基准测试表明解压方法是一个不错的选择。 http://www.perlmonks.org/?node_id=939987 – DavidO