書きたいコードのセクションに問題があります。私の問題は、2 つの配列とそれらに含まれる要素に基づいています。
(文字列内の位置に関連する) 数値で満たされた 2 つの配列があります。位置の間の部分文字列を選択したいと思います。最初の配列の要素は部分文字列の先頭で、2 番目の配列の要素は部分文字列の末尾です。
私が提供したコードは、ファイルを読み取り、それを文字列にします。
>demo_data
theoemijono
milotedjonoted
dademimamted
弦:
theoemijonomilotedjonoteddademimamted
だから私がしたいのは、部分文字列を抽出することです
emijonomiloted
emimamted
私が書いたコードは、最初の要素配列を取り、それを2番目の配列の対応する要素と比較し、クロスオーバーがないことを確認して、提供されたシーケンスに見られるemiで始まりtedasで終わる部分文字列を保持します
for($i=0; $i<=10; $i++)
{
if ($rs1_array[$i] < $rs2_array[$i] && $rs1_array[$i+1] > $rs2_array[$i])
{
my$size= $rs2_array[$i]-$rs1_array[$i]+ 3);
my$substr= substr($seq, $rs1_array[$i],$size);
print $substr."\n";
}
}
このコードを使用すると、最初の部分文字列に対して機能しますが、最初の配列の要素が少なく、比較を完了できないため、2 番目の部分文字列は無視されます。
アップデート
配列構造:
@rs1_array = (4, 28);
@rs2_array = (15, 22, 34);
こんにちはボロディン、あなたは絶対に正しかった..私は今コードを編集しました! 長さの問題に関連してご覧いただきありがとうございます。奇妙なオフセットの理由は、@rs2_array の値が開始位置であり、この場合、「ted」という単語の残りの部分が考慮されていないためです。文字列を完成させるにはこれが必要です。配列は次のように正しく構築されます。 @rs1_array の要素は開始位置 "emi" を表します。@rs2_array 要素も各 "ted" の開始位置を保持するため、文字列に 2 つの emi と 3 つの ted があるため、バランスが崩れます。