我已经在这段代码上工作了几天,在最后一段中遇到了一个问题。目标是让文件打印出“疾病/特征”在文件中出现的次数。使用计数器,问题是代码只是打印出数组的一列中的所有内容,而不是搜索它的次数。我假设这是计数器一半代码的问题。
#!/usr/bin/perl
use strict;
use warnings;
my %TRAIThash;
my $usrin = "Leoprsy";
my %DISEASEslashTRAIT;
open (my $input, "<", "gwas_catalog_v1.0-downloaded_2015-07-08.test") || die();
while (<$input>) {
my @t = split (/\t/);
my $tempVar = $t[7];
chomp($tempVar);
if (exists $DISEASEslashTRAIT{$tempVar}) {
$DISEASEslashTRAIT{$tempVar}++;
}
else {
$DISEASEslashTRAIT{$tempVar}=1;
}
}
my $DISEASEslashTRAITcount;
print $DISEASEslashTRAIT{"$usrin"}; "\n";
if (exists $DISEASEslashTRAIT{$usrin}) {
print "\n $usrin is published ".$DISEASEslashTRAIT{$usrin}." times within the gwas database.\n";
}
else {
print "$usrin doesn't exist in the hash\n";
}
close ($input);我希望它打印的是,“最大摄氧量响应”在文件中发布了X次。
我已经浏览了这里和一些网站,但当我尝试它时,什么都没有真正起作用。我以前遇到过这种情况,所以我认为对于那些学习编程的人来说,这是一个常见的问题,但当这种情况发生时,我通常会回到绘图板上,所以我想找到一种更简单的方法来解决这个问题。输入是一个33列的代码,我使用的是一个10行的测试文件。我不能复制它,但它是GWAS数据文件。我添加了strict和warnings,现在它运行了,出现了完全相同的问题
发布于 2015-07-27 23:31:19
use strict和use warnings编译指示为编写干净的代码提供了大量信息和帮助。最重要的是,您需要在使用所有变量之前使用my声明它们。这将发现标识符的拼写错误。
例如,第一个循环构建%DISEASEslashTRAIThash散列,但在第二个循环中使用的是%DISEASEslashTRAIT。你还有一个应该只有一个美元符号的exists $$DISEASEslashTRAIT{"$usrin"},warnings会拿起它
这就是我写你的程序的方式。最好避免在局部变量中使用大写。
#!/usr/bin/perl
use strict;
use warnings;
open my $in_fh, '<', 'file.test' or die $!;
my %disease_traits;
while ( <$in_fh> ) {
chomp;
my $disease_trait = (split /\t/)[7];
++$disease_traits{$disease_trait} if $disease_trait;
}
while () {
my $usrin = "Maximal oxygen uptake response";
# my $usrin = <>;
chomp $usrin;
my $count = $disease_traits{$usrin};
if ( defined $count ) {
print qq{\n "$usrin" is published $disease_traits{$usrin} times within file.\n};
last;
}
}https://stackoverflow.com/questions/31656462
复制相似问题