perl自动修改mol2中错误的N原子类型Nar-Npl3
#!/usr/bin/perl#修改3处错误;
#默认可能有两个Nar,当时没有考虑有3个Nar
#我认为只有1个Nar需要修改,可能有两个Nar 需要修改
#在这里的时候要稍微注意下,经过修改让trueID返回数组
subatomtype2id{
$atomtype=$_;
@text=@{$_};
#print "@text";
foreach $line(@text){
#print "$line";
if($line=~/\s+(\d+)\s+\w+\s+\S+\s+\S+\s+\S+\s+$atomtype/)
{
#print "$1 \n";
push @narid,$1;
}
}
return @narid;
}
#指定定原子类型返回@ids;
subtrueID{
@nums=@_;
#print join(' ',@nums);
foreach $num(@nums)
{
foreach $line(@text)
{
if($line=~/^\s+\d+\s+$num\s+(\d+)\s+(\S+)$/ || $line=~/^\s+\d+\s+(\d)+\s+$num\s+(\S+)$/ )
{
$tempid=$1;
$bondtype=$2;
if($bondtype=~/1/){
push @trueids, $num;
}
}
}
}
return @trueids;
}
$atomtype='N.ar';
open FH, "F:/task/test/segment1005.mol2";
@text=<FH>;
@narid=&atomtype2id("N.ar",\@text); ##获得所有Nar的类型原子的ID 编号
@trueids=&trueID(@narid);
while(@trueids!=0)
{
$getid=shift @trueids; #从里面依次取出id;
foreach $line(@text)
{
if($line=~/(^\s+$getid\s+\w+\s+\S+\s+\S+\s+\S+\s+)($atomtype\s+)(.+$)/)
{
print $1;
printf("%-11s",'N.pl3');
print $3;
print "\n";
}
# 1 1 2 ar
elsif ($line=~/(^\s+\d+\s+\d+\s+$getid\s+)(\S+)$/ || $line=~/(^\s+\d+\s+$getid\s+\d+\s+)(\S+.+)$/)
{
# 6 3 7 1
print $1;
printf("%-2d" ,"1");
print "\n";
}else{
print $line;
print $_;
}
}
}
subatomtype2id{
$atomtype=$_;
@text=@{$_};
#print "@text";
foreach $line(@text){
#print "$line";
if($line=~/\s+(\d+)\s+\w+\s+\S+\s+\S+\s+\S+\s+$atomtype/)
{
#print "$1 \n";
push @narid,$1;
}
}
return @narid;
}
批量处理,自己加个循环,或者联系我qq 1679088991
呵呵 谢谢 数据挖掘的分享!
页:
[1]