【发布时间】:2016-12-30 10:54:06
【问题描述】:
我运行了一个分子动力学模拟,它给了我 2,000 个轨迹文件。这些文件的文件名格式为au25-c2-benzalacetone.001,最大为2000。我编写了一个通用的perl 程序,但它没有读取2,000 个文件。如何修改我的代码,使其读取每个文件并分别提取我想要的每个文件的坐标?我需要 2,000 个coordinates_of_interest.dat 文件。这里的修补程序文件是au25-c2-benzalacetone 文件。这是我写的代码:
#!/usr/bin/env perl
use Math::VectorReal;
use Math::Trig qw/acos/;
use strict;
use warnings;
my $file1 = $ARGV[0];
my $n1 = $ARGV[1];
my $n2 = $ARGV[2];
my $tinker_file = sprintf "%s.%03d"
my( $file1, $n1, $n2 ) = @ARGV;
foreach $tinker_file (glob "$tinker_file.*") {
print "Filename: $tinker_file\n";
}
my $file2 = "coordinates_of_interest.dat";
my %lines_of_interest = map { $_ => 1 } 18, 25, 26;
{
open(FILE2, '>', $file2) or die "couldn't open the file!";
for(my $i=$n1;$i<=$n2;$i++){
{
open(FILE1, '<', $tinker_file) or die "couldn't open the file!";
{
my $num_lines = keys %lines_of_interest;
while (<FILE1>) {
if ($lines_of_interest{$.}) {
print FILE2;
last unless --$num_lines;
}
}
}
}
}
}
~
~
~
【问题讨论】:
-
您需要修复几个语法错误(
$n1和$n2上的my),$i没有用my声明,你的for没有用@987654331 关闭@,您的第一个open未正确终止(缺少)...)。您可能还应该隐含close()您的文件句柄。 -
是的。我要在这里编辑这个。我运行了代码,发现 FILE1 和 FILE2 出现问题。
标签: arrays perl variables chemistry