以下のスクリプトは、長さ243(http://www.bioinformatics.org/sms2/random_dna.html
を使用して生成)と可変長パターンのランダムに生成された単一のDNA配列を使用しています。
これは、シーケンス文字列を変更する代わりに、強調表示する必要がある位置を最初に記録することによって機能します。ハイライトは、シーケンスが50塩基のチャンクに分割された後に挿入されます。
強調表示は、ブックキーピングの作業が最小限に抑えられるように、逆の順序で行われます。
#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
use YAML::XS;
my $PRETTY_WIDTH = 50;
# I am using bold-italic so the highlighting
# is visible on Stackoverflow, but in real
# life, this would be something like:
# my @PRETTY_MARKUP = ('<span class="highlighted-match">', '</span>');
my @PRETTY_MARKUP = ('<b><i>', '</i></b>');
use constant { BAŞ => 0, SON => 1, ROW => 0, COL => 1 };
my $sequence = q{ccggtgagacatccagttagttcactgagccgacttgcatcagtcatgcttttccccgtaatgagggccccatattcaggccgtcgtccggaattgtcttggatccggaatgcagcttttctcaccgcttgatgaacattcactgaatatctgacgccgcgaaaacagggtcactagcctgtttccggtcgcccgagaccggcgagtttgtggtatcgcgagcgcccccgggcggtagggtct};
my $wanted = 'c..?gg';
my @pos;
while ($sequence =~ /($wanted)/g) {
push @pos, [ pos($sequence) - length($1), pos($sequence) ];
}
print Dump \@pos;
my @output = unpack "(A$PRETTY_WIDTH)*", $sequence;
print Dump \@output;
while (my $pos = pop @pos) {
my @rc = map pos_to_rc($_, $PRETTY_WIDTH), @$pos;
substr($output[ $rc[$_][ROW] ], $rc[$_][COL], 0, $PRETTY_MARKUP[$_]) for SON, BAŞ;
}
print Dump \@output;
sub pos_to_rc {
my $r = int($_[0]/$_[1]);
my $c = $_[0] - $r * $_[1];
[ $r, $c ];
}
出力:これは宿題となっていることが判明し、特に以来
C:\...\Temp> perl s.pl
---
- - 0
- 4
- - 76
- 80
- - 87
- 91
- - 97
- 102
- - 104
- 108
- - 165
- 170
- - 184
- 188
- - 198
- 202
- - 226
- 231
---
- ccggtgagacatccagttagttcactgagccgacttgcatcagtcatgct
- tttccccgtaatgagggccccatattcaggccgtcgtccggaattgtctt
- ggatccggaatgcagcttttctcaccgcttgatgaacattcactgaatat
- ctgacgccgcgaaaacagggtcactagcctgtttccggtcgcccgagacc
- ggcgagtttgtggtatcgcgagcgcccccgggcggtagggtct
---
- ccggtgagacatccagttagttcactgagccgacttgcatcagtcatgct
- tttccccgtaatgagggccccatattcaggccgtcgtccggaattgtctt - ggatccggaatgcagcttttctcaccgcttgatgaacattcactgaatat
- ctgacgccgcgaaaacagggtcactagcctgtttccggtcgcccgagacc - ggcgagtttgtggtatcgcgagcgcccccgggcggtagggtct
、それはこれを取ると、あなたのハッシュテーブル内のすべての系列に適用するのはあなた次第です。
マッチの位置と長さを記録し、アンパックして、適切な場所にタグを挿入します。 ...使用可能なサンプルデータと自己完結型スクリプトを提供する必要があります。 –
申し訳ありませんが、私が報告したコードが十分だと思いました。私はマッチの位置と長さを記録しました。適切な場所にタグを展開して挿入するにはどうすればよいですか? – Diesel
質問を定式化する方法については、[MCVE](https://stackoverflow.com/help/mcve)を参照してください。 [my answer](/ a/44394781/100754)も参照してください。 –