- 締切済み
他の解き方
ディレクトリの中にアミノ酸配列が記されたファイルが5枚あります。それぞれのファイルのアミノ酸配列について疎水性指標を計算し、ファイル名とともに表示しなさい。 与えられたディレクトリ:dp18 アミノ酸配列を、疎水性指標に変換するハッシュは以下のものを用いる。 A => "1.8", V => "4.2", L => "3.8", I => "4.5", M => "1.9", W => "-0.9", F => "2.8", P => "-1.6", G => "-0.4", S => "-0.8", T => "-0.7", C => "2.5", Y => "-1.3", N => "-3.5", Q => "-3.5", K => "-3.9", R => "-4.5", H => "-3.2", D => "-3.5", E => "-3.5", ディレクトリを引数としてperlスクリプトを実行する時は、以下のように入力。 perl [スクリプト名] [ディレクトリ名] という問題を自分で解いてみたのですが、それ以外にわかりやすい方法どのような書き方があるのかを知りたいのです。わかりやすく教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- tatsu99
- ベストアンサー率52% (391/751)
このプログラム自体十分解りやすく、質のよいプログラムです。アルゴリズムは、無駄なく、かつ他人にも十分解りやすくなっています。 以下、気がついた点を述べます。 1.このソースは、実行するとエラーになりますので、エラーをとったものを載せるようにしてください。 ARGY -> ARGV(2カ所) print " Direntory: ", indir, "\n"; ---> $indir $file_path = "./" . $indir . "$entry; --->前は省略 "." / $entry; $file_oath --> $file_path @aa_part --> @aa_parts 等が誤っています。 2.以下は、趣味の問題ですが、 1)opendir(DIR,$indir) || die;は、ディレクトリ名に誤りがある旨のメッセージを表示したほうがよいでしょう。 2)テキスト中のハッシュにない文字(@,#等)があった時、エラーメッセージをだしたほうが、親切でしょう。 if ($aa12hydro{$item} == undef){ で判定可能 3)テキスト名はソートして、出した方がよいでしょう。 closedir(DIR); の次へ @file_entry = sort (@file_entry);を入れてください。 以上。
- natsuki_tk
- ベストアンサー率35% (99/279)
わかりやすい方法も何も、 アミノ酸配列の疎水性指標の計算方法そのものがわかりません(^^; せめて、どういう計算を行おうとしているのか説明するとか、 今あるソースコードをのせてみるとかする必要があると思います。 また、仮に計算方法がわかっても、 いまあるソースがどのようなものなのかわからなければ アドバイスのしようが無いと思いますが・・ #bioperl系統のユーザはPerl全体からみるとまだまだ少ないと思います。
補足
書き込もうとしたのですが、字数が多くムリだったのです・・・すみませんでした。 %aa12hydro = ( A => "1.8", V => "4.2", L => "3.8", I => "4.5", M => "1.9", W => "-0.9", F => "2.8", P => "-1.6", G => "-0.4", S => "-0.8", T => "-0.7", C => "2.5", Y => "-1.3", N => "-3.5", Q => "-3.5", K => "-3.9", R => "-4.5", H => "-3.2", D => "-3.5", E => "-3.5", ); if (!@ARGY) { print "The target directory must be specified as the command-line argument\n"; exit; } $indir = shift(@ARGY); opendir(DIR,$indir) || die; print"\n"; print " Direntory: ", indir, "\n"; print "-----------------------------", "\n"; @file_entry = readdir(DIR); closedir(DIR); foreach $entry (@file_entry) { if($entry !~ /.txt$/){ next; } $file_path = "./" . $indir . "$entry; open(IN, $file_oath) || die; $aa = ""; while (<IN>){ chomp; $aa .= $_; } close(IN); @aa_part = split(//, $aa); $count_hydro = 0; foreach $item(@aa_parts){ $count_hydro += $aa12hydro{$item}; } print "File:", $entry, "\n"; print "Hydrophobicity: ",$count_hydro, "\n"; } exit;