私はしばらくこれに苦労していて、私が見逃した明らかな何かがあるかどうか疑問に思いました。
プログラミングの学習/実践として、制限酵素ダイジェストミックスの成分を計算するための簡単なスクリプトをまとめようとしています。ただし、最初に酵素ストック濃度のリストを取得する必要があります。
New England Biolabsの酵素ページから個々のページをすべて引き出しました。この現在のスクリプトでの私の目標は、酵素の名前と会社から入手できる濃度を引き出すことです。
この例は、EcoRIのローカルコピー(提出物の下部に含まれるリンク)で機能します。
use warnings;
use strict;
open(FILE,'productR0101.asp');
my $line;
my $counter;
my $array1;
my $array2;
my $array3;
my $concentration;
my @array4;
$counter = 1;
while ($line = <FILE>) {
chomp($line);
if ($counter == 6 ){
$array1 = $line;
$counter++;
}
else{
$counter++;
}
if ($line =~ m/.{8}units.ml/g) {
(@array4) =$line =~ m/.{8}units.ml/g;
print @array4;
}
}
print "\n".$array1;
exit;
すべてのファイルの6行目に酵素名が付いているので、その行全体をプルしました。ただし、濃度は異なる場所にあるため、私のアプローチは、ファイルを一度に1行ずつ読み取り、units/ml
タグと一致させることでした。
私の考えでは、whileループが実行されるたびに、各行の一致があればそれを出力する必要があり、事実上、個別の印刷ステートメントの文字列が生成されます。
これは私がめちゃくちゃになるところです。このファイルには、units/ml
タグが付いた6つの異なる場所があります。3つはfor 20,000
、3つはfor100,000
です。
6つの異なる結果が出力されることを期待していましたが、これを実行すると、1つの100,000 units/ml
結果のみが返されます。
私はあらゆる種類の修正を試みました。文字列を連結して、文字列として格納してみました。行に触れない別の配列に連結してみましたが(@array4) = $line =~ m/.{8}units.ml/g
、破損するか、同じ結果になります。
そして最後に、奇妙な慣習についてお詫び申し上げます。私はまだPerlを学んでおり、プログラミングの最初の経験はMATLABでした。
また、$array1
何$array2
がどこに置かれているかを正確に追跡しようとしていたため、、、などが存在します。私の意図は、機能するようになったらクリーンアップすることです。
それで、誰かが私が間違っていることについて何か考えを持っていますか?
編集:データソースは、個々の酵素ページのソースコードです。この例では、ページソースを表示すると、スクリプトに与えた完全な入力ファイルを取得できます。