如何从pdb文件中取出某些元素
How to take out certain elements from a pdb file
我正在尝试从 pdb 文件中取出某些列。我已经在我的代码中删除了所有以 ATOM 开头的行。出于某种原因,我的子功能无法正常工作,我不知道在哪里或如何调用它们。
我的代码是:
open (FILE, $ARGV[0])
or die "Could not open file\n";
my @newlines;
while ( my $line = <FILE> ) {
if ($line =~ m/^ATOM.*/) {
push @newlines, $line;
}
}
my $atomcount = @newlines;
#print "@newlines\n";
#print "$atomcount\n";
##############################################################
#This function will take out the element from each line
#The element is from column 77 and contains one or two letters
sub atomfreq {
foreach my $record1(@newlines) {
my $element = substr($record1, 76, 2);
print "$element\n";
return;
}
}
################################################################
#This function will take out the residue name from each line
#The element is from column 18 and contains 3 letters
sub resfreq {
foreach my $record2(@newlines) {
my $residue = substr($record2, 17, 3);
print "$residue\n";
return;
}
}
您可以直接在您的其他代码下调用它们,如下所示:
atomfreq();
resfreq();
正如@Ossip 在 中所说,您只需调用您的函数:
sub atomfreq {
...
}
sub resfreq {
...
}
atomfreq();
resfreq();
但是我不确定这些函数是否按照你的意图进行,因为评论暗示它们应该打印 every $residue
和 $element
来自 @newlines
数组。您在 for
循环中放置了一个 return
语句,它将立即从整个函数(及其 for
循环)中 return ,因此它将仅打印第一个 $residue
或 $element
。因为函数不应该 return 任何你可以删除该语句的东西:
sub atomfreq {
foreach my $record1(@newlines) {
my $element = substr($record1, 76, 2);
print "$element\n";
}
}
sub resfreq {
foreach my $record2(@newlines) {
my $residue = substr($record2, 17, 3);
print "$residue\n";
}
}
atomfreq();
resfreq();
我正在尝试从 pdb 文件中取出某些列。我已经在我的代码中删除了所有以 ATOM 开头的行。出于某种原因,我的子功能无法正常工作,我不知道在哪里或如何调用它们。 我的代码是:
open (FILE, $ARGV[0])
or die "Could not open file\n";
my @newlines;
while ( my $line = <FILE> ) {
if ($line =~ m/^ATOM.*/) {
push @newlines, $line;
}
}
my $atomcount = @newlines;
#print "@newlines\n";
#print "$atomcount\n";
##############################################################
#This function will take out the element from each line
#The element is from column 77 and contains one or two letters
sub atomfreq {
foreach my $record1(@newlines) {
my $element = substr($record1, 76, 2);
print "$element\n";
return;
}
}
################################################################
#This function will take out the residue name from each line
#The element is from column 18 and contains 3 letters
sub resfreq {
foreach my $record2(@newlines) {
my $residue = substr($record2, 17, 3);
print "$residue\n";
return;
}
}
您可以直接在您的其他代码下调用它们,如下所示:
atomfreq();
resfreq();
正如@Ossip 在
sub atomfreq {
...
}
sub resfreq {
...
}
atomfreq();
resfreq();
但是我不确定这些函数是否按照你的意图进行,因为评论暗示它们应该打印 every $residue
和 $element
来自 @newlines
数组。您在 for
循环中放置了一个 return
语句,它将立即从整个函数(及其 for
循环)中 return ,因此它将仅打印第一个 $residue
或 $element
。因为函数不应该 return 任何你可以删除该语句的东西:
sub atomfreq {
foreach my $record1(@newlines) {
my $element = substr($record1, 76, 2);
print "$element\n";
}
}
sub resfreq {
foreach my $record2(@newlines) {
my $residue = substr($record2, 17, 3);
print "$residue\n";
}
}
atomfreq();
resfreq();