このようなファイルがあります。
Perl コードでは、配列を使用し@query = ('A+80', 'A+40', 'A+202', 'B+130', 'B+268', 'B+211', 'A+35');
ています。やりたいことは次のとおりです。配列の各要素について、以下に示すファイルの行をスキャンし、次のように出力します。
A+80 - HELIX
A+40 - SHEET
A+202 - HELIX
B+130 - HELIX
B+268 - SHEET
B+211 - SHEET
A+35 - LOOP
この出力の背後にあるロジックは、配列の各エントリについて、最初の部分 (A または B) と 2 番目の部分 (最初の部分に関連付けられた番号) を抽出することです。配列の最初のエントリを考えてみましょう: A+80
. ファイルの 3 行目では、数値 80 が 78 (6 列目) と 90 (9 列目) の間にあり、最初のアルファベットA
もどちらの場合も一致しています。したがって、プログラムはこのクエリに対して HELIX を出力します。
2 番目の要素を考えてみましょう: A+40
. 2番目の部分、つまり数値はこの行の範囲にあります
SHEET 2 B 3 ARG A 37 VAL A 43 1
つまり、7 列目と 10 列目にリストされている数字の間で、アルファベットも一致します。したがって、このエントリの出力は次のとおりです。 SHEET
のような他の場合については、B+211
. 以下の行は、それに関連付けられた数字とアルファベットに一致します。
SHEET 2 B 3 ARG A 37 VAL A 43 1
したがって、このエントリの出力は次のとおりです。 SHEET
また、アルファベットと数字が関連付けられているエントリについては、ファイル内のどの行とも一致しません。コードの出力:A+35 - LOOP
Perlでこれを行う効率的な方法は何ですか? 私は Perl の初心者なので、現在、各エントリを連続する配列要素に分割し@query
ています。しかし、どういうわけか、目的の出力を得ることができません。
助けてください...
HELIX 1 1 GLY A 9 GLN A 30 1
HELIX 2 2 ASP A 47 ILE A 63 1
HELIX 3 3 GLU A 78 GLU A 90 1
HELIX 4 4 THR A 111 ALA A 117 1
HELIX 5 5 PRO A 120 LYS A 122 5
HELIX 6 6 SER A 129 ARG A 137 1
HELIX 7 7 CYS A 147 THR A 159 1
HELIX 8 8 GLY A 178 ASN A 188 1
HELIX 9 9 LEU A 202 LYS A 208 1
HELIX 10 10 GLY A 224 TRP A 226 5
HELIX 11 11 TYR A 258 GLU A 263 1
HELIX 12 12 VAL A 275 PHE A 294 1
HELIX 13 13 GLY B 9 GLN B 30 1
HELIX 14 14 ASP B 47 ILE B 63 1
HELIX 15 15 GLU B 78 GLU B 90 1
HELIX 16 16 THR B 111 ALA B 117 1
HELIX 17 17 PRO B 120 LYS B 122 5
HELIX 18 18 SER B 129 ARG B 137 1
HELIX 19 19 CYS B 147 THR B 159 1
HELIX 20 20 GLY B 178 TRP B 187 1
HELIX 21 21 LEU B 202 LYS B 208 1
HELIX 22 22 GLY B 224 TRP B 226 5
HELIX 23 23 TYR B 258 GLU B 263 1
HELIX 24 24 GLY B 276 PHE B 294 5
SHEET 1 A 2 GLU A 5 LEU A 7 0
SHEET 2 A 2 PHE A 267 THR A 269 1
SHEET 1 B 3 LYS A 66 LEU A 72 0
SHEET 2 B 3 ARG A 37 VAL A 43 1
SHEET 3 B 3 GLY A 96 VAL A 99 1
SHEET 1 C 4 THR A 191 CYS A 195 0
SHEET 2 C 4 HIS A 167 VAL A 171 1
SHEET 3 C 4 ILE A 211 VAL A 214 1
SHEET 4 C 4 ILE A 232 ASP A 235 1
SHEET 1 D 2 GLU B 5 LEU B 7 0
SHEET 2 D 2 PHE B 267 THR B 269 1
SHEET 1 E 3 LYS B 66 LEU B 72 0
SHEET 2 E 3 ARG B 37 VAL B 43 1
SHEET 3 E 3 GLY B 96 VAL B 99 1
SHEET 1 F 4 THR B 191 CYS B 195 0
SHEET 2 F 4 HIS B 167 VAL B 171 1
SHEET 3 F 4 ILE B 211 VAL B 214 1
SHEET 4 F 4 ILE B 232 ASP B 235 1
SHEET 1 G 2 ASN B 239 PRO B 242 0
SHEET 2 G 2 ARG B 250 VAL B 253 -1