Perl で入力ファイルから値を読み取ろうとしています。入力ファイルは次のようになります。
1-sampledata1 This is a sample test
and data for this continues
2-sampledata2 This is sample test 2
Data for this also is on second line
上記のデータを読み込んで、 for のデータ1-sampledata1
が入り@array1
、 for のデータ2-sampledata2
が入り@array2
ます。このようなセクションが約 50 あります。のように50-sampledata50
。
編集: 名前は常に X-sampledataX ではありません。たとえば、私はちょうどそれをしました。したがって、名前をループにすることはできません。手動で入力する必要があると思います
私はこれまでのところ次のものを持っています(これは機能します)。しかし、私はこれを行うためのより効率的な方法を探しています..
foreach my $line(@body){
if ($line=~ /^1-sampledata1\s/){
$line=~ s/1-ENST0000//g;
$line=~ s/\s+//g;
push (@array1, $line);
#using splitarray because i want to store data as one character each
#for ex: i wana store 'This' as T H I S in different elements of array
@splitarray1= split ('',$line);
last if ($line=~ /2-sampledata2/);
}
}
foreach my $line(@body){
if ($line=~ /^2-sampledata2\s/){
$line=~ s/2-ENSBTAP0//g;
$line=~ s/\s+//g;
@splitarray2= split ('',$line);
last if ($line=~ /3-sampledata3/);
}
}
ご覧のとおり、セクションごとに異なる配列と、セクションごとに異なる for ループがあります。これまでのアプローチに従えば、50 個の for ループと 50 個の配列になってしまいます。
これを行う別のより良い方法はありますか?最終的には、50 個の配列で終了したいのですが、50 個の for ループを書きたくありません。そして、プログラムの後半で 50 個の配列をループするので、それらを配列に格納することはできますか? 私はPerlを初めて使用するので、ちょっと圧倒されます...