2017-12-19 5 views
0

Ich muss die Zeilen einer Eingabedatei in seine Spalten aufteilen.Teilen Sie eine Zeile in ihre Komponenten

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 

Der Code, den ich funktioniert gut haben, solange die 6. Spalte < 1000, oder kürzer als 4 Stellen:

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

Sobald jedoch Spalte 6 1000 erreicht, wird es nicht mehr diskriminiere die zwei Spalten. Ich bin kein Experte in Perl, aber der Code, mit dem ich es zu tun habe, ist perl, also muss ich herausfinden, wie man diese z. durch die Anzahl der Ziffern jeder Spalte. Irgendwelche Vorschläge?

+0

Split auf Position. Alle Spalten scheinen die gleiche Breite zu haben. –

+0

Danke für Ihren Vorschlag. Sie haben jedoch nicht alle die gleiche Breite. Z.B. Spalte 5 (wo "C" steht) hat die Länge von 1 Ziffer. –

+0

Die Spalten haben die gleiche Länge für jede Zeile, die ich meine. Spalte 5 hat für jede Zeile die Länge 1. Daher beginnt jede Spalte immer am selben Ort. Daher können Sie auf Position teilen. Dies gilt zumindest für das Beispiel, das Sie gezeigt haben. –

Antwort

4

Ich löste es mit Entpacken und Definieren der Länge jeder Spalte. $ format = 'A6 A6 A5 A4 A1 A5'; ($ ATOM, $ atom_num, $ atom_type, $ res, $ kette, $ res_num) = entpacken ($ format, $ pdb);

+0

Schöne Lösung. Aber es gibt auch [einige Perl-Module] (https://www.google.de/search?q=perl+read+pdb), die PDB-Dateien analysieren, zum Beispiel ['Bio :: PDB :: Structure' ] (http://search.cpan.org/~rulix/Bio-PDB-Structure-0.02/lib/Bio/PDB/Structure.pm). Keine Ahnung, ob sie gut sind, aber sie existieren. – PerlDuck

Verwandte Themen