提供给定位置的子串

时间:2014-02-05 00:20:58

标签: perl unix

给定一个字符串,参考点位置和一些长度:

my $string = "AAAAAAAATGAAAAAAAA";
my $ref_pos = 10;
my $length = 5;

我想从参考位置提取长度为+/- 5bp的子串, 屈服:AAAATGAAAAA

在上面的示例中,ref_pos将对应于G,然后我们从中提取+/- 5bp G

如果长度超过子串长度,我们会报告所有碱基。 例如:

my $string2 = "AAAAAAAATGCCC";
my $ref_pos = 10;
my $length = 5;

将产生:AAAATGCCC

在Perl中使用它的方法是什么?

1 个答案:

答案 0 :(得分:1)

我认为你的问题实际上是关于当长度可以与字符串的开头或结尾重叠时如何确定开始/结束位置。这是伪代码的一种方式:

str = string
p   = desired offset
len = desired length

start = max(0,p-(len/2))
end   = min(str.length, max(start+len, p+(len/2)))

起始位置应为所需偏移减去所需长度的1/2,但不能小于零。一旦固定了起始位置,将结束计算为(所需偏移量加上所需长度的一半)或(起始加上所需长度),以较大者为准。最后,限制结束永远不要超过字符串的结尾。

请注意,end是结果的最后一个字符之外的一个字符。

处理一个奇怪的“所需长度”留作练习。