Regex Perl';或';条件获取同一密钥中的哈希值
我有一个文件,其中包含古吉拉特邦、西孟加拉邦、查谟和克什米尔和D&D哈维利等州的格式。我写了一个正则表达式来得到这样的名字。这些名称进入“年”(2001)的键中,这样它也可以从正则表达式中获得,因此年是键,不同的州是同一键的一部分Regex Perl';或';条件获取同一密钥中的哈希值,regex,perl,hash,Regex,Perl,Hash,我有一个文件,其中包含古吉拉特邦、西孟加拉邦、查谟和克什米尔和D&D哈维利等州的格式。我写了一个正则表达式来得到这样的名字。这些名称进入“年”(2001)的键中,这样它也可以从正则表达式中获得,因此年是键,不同的州是同一键的一部分 my $stat; my ($line, $year, $state_name, @state_name); while($line = <FH>){ if($line =~ m/^Year (\d+)\S+/){ $yea
my $stat;
my ($line, $year, $state_name, @state_name);
while($line = <FH>){
if($line =~ m/^Year (\d+)\S+/){
$year = $1;
$stat->{$year} = {};
next;
}
elsif ($line =~ m/^State:,(\w+\s\w+)/){
$state_name = $1;
$stat->{$year}{$state_name} = {};
next;
}
elsif ($line =~ m/^State:(\w+)/){
$state_name = $1;
$stat->{$year}{$state_name} = {};
next;
}
elsif ($line =~ m/^State:(\w&\w\s\w+)/){
$state_name = $1;
$stat->{$year}{$state_name} = {};
next;
}
elsif ($line =~ m/^State:(\w+\s&\s\w+)/){
$state_name = $1;
$stat->{$year}{$state_name} = {};
next;
}
}
print (Dumper(\$stat));
取而代之的是,只有西孟加拉邦在散列中以键as 2001打印,其他的被省略。你能告诉我哪里出了问题吗。多谢各位
编辑的文件如下所示:
Year 2001,,,,,,,,
State:,West Bengal,,,,,,,
Year 2001,,,,,,,,
State:,Gujarat,,,,,,,
Year 2001,,,,,,,,
State:,Jammu & Kashmir,,,,,,, and so on.
守则:
if($line =~ m/^Year (\d+)\S+/){
$year = $1;
$stat->{$year} = {};
next;
}
将覆盖$stat->{$year}
下的结构(如果存在),因为“2001”年份值出现多次
快速修复:
if($line =~ m/^Year (\d+)\S+/){
$year = $1;
if (not defined $stat->{$year}) {
$stat->{$year} = {};
}
next;
}
您确定
年份
总是显示在其他项目之前吗?如果Year
延迟显示,它将不会设置$Year
您可以将输入文件作为示例提供给您的帖子吗?看来找到你的错误很重要,请看编辑部分。。谢谢你的快速回复州名如何?为什么只显示一个名称?请你调查一下。谢谢你误解了我的修正,它们并没有像你说的那样被覆盖,相反,你正在丢失它,因为你文件中的“Year”指令正在用一个新的哈希替换现有的哈希,这很糟糕。我的修复阻止了这种替换。
if($line =~ m/^Year (\d+)\S+/){
$year = $1;
if (not defined $stat->{$year}) {
$stat->{$year} = {};
}
next;
}