perl は目的のファイルのパスを読み込み、対応するファイルを開きます。
以下のDNA配列は、window以下のF: \data.txt に格納されています。
AAAAAAAAAAAAAAGGGGGGGTTTTCCCCCCCC
CCCCCGTCGTAGTAAAGTATGCAGTAGCVG
CCCCCCCCCCGGGGGGGGGGAAAAAAAAAAAAAAATTTTTTAT
AAACG
以下はその手順です。
# The following program is used to calculate the number of ATGCs in a segment of DNA sequence
#First define the number of four bases as 0
$count_A=0;
$count_T=0;
$count_C=0;
$count_G=0;
#First, we need to merge the sequence into one line
#First determine the path and filename of the file you want to process (on windows, follow this example)
#f:\\perl\\data.txt
print "please input the Path just like this f:\\\\perl\\\\data.txt\n";
chomp($dna_filename=<STDIN>);
# Open the file
open(DNAFILENAME,$dna_filename)||die("can not open the file!");
# Assign the file to an array
@DNA=<DNAFILENAME>;
# The following two steps are going to combine all the lines into one line and then remove all the white space characters
$DNA=join('',@DNA);
$DNA=~s/\s//g;
# Break the DNA into, and assign it to, an array
@DNA=split('',$DNA);
# Then read the elements of the array in turn and count the number of the four bases
foreach $base(@DNA)
{
if ($base eq 'A')
{
$count_A=$count_A+1;
}
elsif ($base eq 'T')
{
$count_T=$count_T+1;
}
elsif ($base eq 'C')
{
$count_C=$count_C+1;
}
elsif ($base eq 'G')
{
$count_G=$count_G+1;
}
else
{
print "error\n"
}
}
# Output the final result
print "A=$count_A\n";
print "T=$count_T\n";
print "C=$count_C\n";
print "G=$count_G\n";
以下は、実行結果です。
F:\>perl\a.pl
Please input the Path just like this f:\\\perl\\\data.txt
f:\\perl\\\data.txt
error
A=40
T=17
C=27
G=24
F:\>
エラーが表示されることがありますが、これはなぜですか?
一番上の特殊な色でマークされた生のDNA配列をよく見ると、Vがあるので、エラーが出力されるのです。
ここでは、DNA配列を1行にまとめ、空白文字をすべて削除した後、$DNAをsplit関数で配列にし、カウントしていますが、もっと良い方法はないでしょうか?
実はperlにsubstrという関数があるんです。
この関数の使い方を見てみましょう。substr関数は、大きな文字列の一部分だけを扱うので、長い文字列を断片化することになります。つまり、長い文字列を受け取って、それを断片化するのです。それが、ここで使っている機能です。
$little_string =substr($large_string,$start_position,$length)
$little_string =substr($large_string,$start_position,$length 割り込みたい小さな断片の長さ)
ここではDNAの様々な塩基の数を数えるので、扱う文字列は1塩基なので、$lengthを1に設定します。これで必要なものは満たされます。
ここで、修正したコードを書き留めておきます。
# The following program is used to calculate the number of ATGCs in a segment of DNA sequence
#First define the number of four bases as 0
$count_A=0;
$count_T=0;
$count_C=0;
$count_G=0;
#First, we need to merge the sequence into one line
#First determine the path and filename of the file you want to process (on windows, follow this example)
#f:\\perl\\data.txt
print "please input the Path just like this f:\\\\perl\\\\data.txt\n";
chomp($dna_filename=<STDIN>);
# Open the file
open(DNAFILENAME,$dna_filename)||die("can not open the file!");
# Assign the file to an array
@DNA=<DNAFILENAME>;
# The following two steps are going to combine all the lines into one line and then remove all the white space characters
$DNA=join('',@DNA);
$DNA=~s/\s//g;
# Then read the elements of the string in turn and count the number of the four bases
for ($position=0;$position<length $DNA;++$position)
{
$base=substr($DNA,$position,1);
if ($base eq 'A')
{
$count_A=$count_A+1;
}
elsif ($base eq 'T')
{
$count_T=$count_T+1;
}
elsif ($base eq 'C')
{
$count_C=$count_C+1;
}
elsif ($base eq 'G')
{
$count_G=$count_G+1;
}
else
{
print "error\n"
}
}
# Output the final result
print "A=$count_A\n";
print "T=$count_T\n";
print "C=$count_C\n";
print "G=$count_G\n";
得られた結果は以下の通りです。
F:\>perl\a.pl
Please input the Path just like this f:\\\perl\\\data.txt
f:\\perl\\\data.txt
error
A=40
T=17
C=27
G=24
F:\>
関連
-
ハイウォーターラインアルゴリズムのPerl実装(多値比較問題法の解法)
-
Perlのeval関数の使用例
-
perl 操作 MongoDB エラー 未定義のシンボル。HeUTF8 解決策
-
Gmailの添付ファイルをPerlで一括ダウンロードするコード
-
Perl で QR コード用のプレーン HTML コードを生成する例
-
Perl バッチクエリ ip 属性メソッドコード
-
ssh ログインの最大数を制限する perl スクリプト (ホワイトリスト対応)
-
windows perlでフラッシュ後にスクリプトが終了しないようにする方法
-
Perl 構文による Perl 演算子の使用法ガイド
-
[解決済み] Perlで2つの文字列を比較するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Perl uc,lc,ucfirst,lcfirst 大文字・小文字変換関数群
-
Perlで配列から値を削除する方法は?
-
ディレクトリ内のファイルを再帰的に走査するためのPerlスクリプト
-
スペースがセパレータである場合の perl qw 問題の解決法
-
Perlのファイルハンドルの説明
-
重複するコンテンツ(重複する行+重複するフィールドの配列)を削除するための perl スクリプトコード
-
PerlのSort関数の使い方まとめと使用例
-
[解決済み] Perlで文字列の各単語の最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み] Perlでタイムアウトを行う方法?
-
問題発生 ----DBI ODBCエラー Perlスクリプトを実行中、エラー:[unixODBC][Driver Manager] データソース名が見つからない、およびデフォルトがない