2012-01-29 194 views
-4

当我运行程序从PDB中提取坐标文件

print" Enter the file name"; 

$a=<>; 

@arr=split(" ",$a); 

if($i=0; $i< scalar @arr; $i++) 

foreach $values(@arr) 
{ 

    if($values=~/^ATOM/) 
    { 
     print FH1 $a; 

     open(FH1,">>output.pdb") 
    } 
} 
+0

你不打开一个文件来阅读代码中的任何地方。 – Mat 2012-01-29 10:46:25

+0

@Mat,你不必明确地打开神奇的ARGV文件句柄。真正的问题是他的代码甚至没有编译。第一个“if”看起来应该是“for”。它也缺少大括号,这在Perl中不是可选的。 – cjm 2012-01-29 10:53:26

+0

@cjm:我不认为'foreach $ values(@arr)'有什么魔力,我没有看到ARGV文件句柄如何在代码中的任何地方使用。我错过了什么吗? (当然,除了'$ a = <>;')。 – Mat 2012-01-29 10:56:03

回答

2

,因为你不能使用PDB文本文件分割提取PDB文件我写的代码波纹管凌动线,没有显示任何OUTPUTFILE字段由位置而不是分隔符定义。见Coordinate File Description (PDB Format)

相反,你应该使用substr ($line,$start,$len)与每个字段(从Coordinate File Description采取)的$start$len不同的值,或依靠现有PDB解析器之一,如Bioperl's