2017-12-19 12 views
0

入力ファイルの行を列に分割する必要があります。行をそのコンポーネントに分割する

ATOM  0 HB3 ALA C 999  28.811 -7.680 12.279 1.00 57.53   H 

ATOM 7637 N PRO C1000  27.299 -5.667 10.647 1.00216.82   N 

私が持っているコードは限り6列目は、4桁の数字よりも< 1000年、または短いほど、正常に動作します:しかし、すぐに列6が1000に達すると

($ATOM, $atom_num, $atom_type, $res, $chain, $res_num) = split(" ", $pdb) 

、それはもはや意志2つの列を区別する。私はperlの専門家ではありませんが、私が扱っているコードはperlですので、これを分割する方法を理解する必要があります。各列の桁数で表します。 提案がありますか?

+0

位置にスプリット。すべての列が同じ幅を持つように見えます。 –

+0

お寄せいただきありがとうございます。彼らはすべて同じ幅を持っていません。例えば。列5(「C」と記載されています)の長さは1桁です。 –

+0

各列の長さは同じです。列5は、各行に対して1の長さを有する。したがって、各列は常に同じ場所で開始します。そのため、あなたはポジションを分けることができます。これは、あなたが示した例では少なくとも真実です。 –

答えて

4

私はunpackを使用し、各列の長さを定義することによって解決しました。 $ format = 'A6 A6 A5 A4 A1 A5'; ($ ATOM、$ atom_num、$ atom_type、$ res、$ chain、$ res_num)= unpack($ format、$ pdb);

+0

すてきな解決策。しかし、PDBファイルを解析する[いくつかのPerlモジュール](https://www.google.de/search?q=perl+read+pdb)もあります。例えば、 '' Bio :: PDB :: Structure' ](http://search.cpan.org/~rulix/Bio-PDB-Structure-0.02/lib/Bio/PDB/Structure.pm)。彼らが良いかどうかは分かりませんが、存在しています。 – PerlDuck

関連する問題