给定一个字符串,参考点和一些长度:
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中做什么?
我认为您的问题实际上是关于如何确定长度可以重叠字符串开始或结束的开始/结束位置。这是伪代码中的一种方法:
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
是结果的最后一个字符。
处理一个奇怪的"所需长度"作为练习。