2017-12-19 14 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 열이 < 1000, 또는보다 짧은 4 자리 숫자로 : 빨리 열 여섯 1000에 도달, 그것은 것 더 이상 그러나

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

두 개의 기둥을 구별하십시오. 나는 펄의 전문가는 아니지만, 내가 다루고있는 코드는 perl이다. 그래서 이것을 나누는 방법을 찾아야한다. 각 열의 자릿수로 제안 사항이 있으십니까?

+0

위치에 분리. 모든 열의 너비가 같아 보입니다. –

+0

제안 해 주셔서 감사합니다. 그들은 모두 같은 너비를 가지고 있지는 않습니다. 예 : 5 번 열 ('C')은 1 자릿수입니다. –

+0

열은 각 행에 대해 동일한 길이를 의미합니다. 열 5는 각 행에 대해 길이가 1입니다. 따라서 각 열은 항상 같은 위치에서 시작됩니다. 따라서 당신은 제 위치로 나눌 수 있습니다. 이것은 당신이 보여준 예제에서 적어도 사실입니다. –

답변

4

언팩을 사용하고 각 열의 길이를 정의하여 해결했습니다. $ 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