-1

配列内の foreach ループを使用してファイルの出力を取得しています。

すべてを取得した後、新しい配列でファイルのセクションのみを抽出するにはどうすればよいですか。

これは私のコードです

foreach (@genetic_codes) {
  chomp;
  my @genetic_codes = split(':', $_);
  if (@genetic_codes != 5) { # error on this line next;
  }
  my $amino_acid = join('","', split(/,/, $genetic_codes[4]));
  print "$genetic_codes[2]=> [$genetic_codes[0],$genetic_codes[1],[$amino_acid]],\n";
}

これは正しい私の出力です。

"M"=> ["Methionine","Met",["ATG"]],
"F"=> ["Phenylalanine","Phe",["TTT"," TTC"]],
"P"=> ["Proline","Pro",["CCT"," CCC"," CCA"," CCG"]],
"S"=> ["Serine","Ser",["TCT"," TCC"," TCA"," TCG"," AGT"," AGC"]],
"T"=> ["Threonine","Thr",["ACT"," ACC"," ACA"," ACG"]],
"W"=> ["Tryptophan","Trp",["TGG"]],

ここで、すべてのコドンを取得して変数に入れZ、重複を取り除く必要があります。

foreach ループを個別に作成する必要がありますか?

私は完全に迷っています、助けてください。---- の最後の出力が必要です

"Z"=>["ACT","AGT",---------------SO ON]],

上記の行の 3 文字すべてが 1 つの変数に含まれています。

4

1 に答える 1

0

コドンが出力の行ごとに個別の配列に格納されるように、コードを変更する必要があります。次に、行ごとにハッシュを構築できます。

あなたのデータが正しいように、入力の処理も修正しました。

サンプル入力データを提供していないため、k が正しいと思われるものを作成し、質問に示されている出力を生成します。

use strict;
use warnings;

my %codons;

while (<DATA>) {
  chomp;
  my @genetic_codes = split /:/;
  @genetic_codes == 5 or die "Invalid data found";
  my @amino_acids = $genetic_codes[4] =~ /[ACTG]+/g;
  printf "%s => [%s, %s, [%s]],\n",
      @genetic_codes[2, 0, 1],
      join ', ', map qq{"$_"}, @amino_acids;#
  $codons{$_}++ for @amino_acids;
}
printf qq{"%s" => [%s]\n}, 'Z', join ', ', map qq{"$_"}, sort keys %codons;

__DATA__
"Methionine":"Met":"M":"":"ATG"
"Phenylalanine":"Phe":"F":"":"TTT, TTC"
"Proline":"Pro":"P":"":"CCT, CCC, CCA, CCG"
"Serine":"Ser":"S":"":"TCT, TCC, TCA, TCG, AGT, AGC"
"Threonine":"Thr":"T":"":"ACT, ACC, ACA, ACG"
"Tryptophan":"Trp":"W":"":"TGG"

出力

"M" => ["Methionine", "Met", ["ATG"]],
"F" => ["Phenylalanine", "Phe", ["TTT", "TTC"]],
"P" => ["Proline", "Pro", ["CCT", "CCC", "CCA", "CCG"]],
"S" => ["Serine", "Ser", ["TCT", "TCC", "TCA", "TCG", "AGT", "AGC"]],
"T" => ["Threonine", "Thr", ["ACT", "ACC", "ACA", "ACG"]],
"W" => ["Tryptophan", "Trp", ["TGG"]],
"Z" => ["ACA", "ACC", "ACG", "ACT", "AGC", "AGT", "ATG", "CCA", "CCC", "CCG", "CCT", "TCA", "TCC", "TCG", "TCT", "TGG", "TTC", "TTT"]
于 2013-02-23T18:53:44.390 に答える