perl 合并hash表问题
我写了一个perl程序合并文件,具体功能为:输入:多个文件,每个文件中,一行记录一个单词及其频率输出:合并所有文件相同单词的频率,输出到一个文件。用Hash表进行处理程序...
我写了一个perl程序合并文件,具体功能为:
输入:多个文件,每个文件中,一行记录一个单词及其频率
输出:合并所有文件相同单词的频率,输出到一个文件。
用Hash表进行处理
程序如下:
use 5.010;
$num=@ARGV; #参数个数需要取成变量
foreach $count(0..$num-1) #索引号从0开始
{
open(FH,'<',$ARGV[$count])or die $!;
@new_array=<FH>; #indexback_i.txt内容
close(FH);
open(fhr,'<','index_result.txt') or die $!; #读原键值对
@old_array=<fhr>;
foreach $new_line(@new_array) #对于新文件的每一行
{
chomp($new_line);
($nk,$nv)= split (',', $new_line); #取新键值对
$is=0; #每个新key设立标志位,若没有相同key则加入hash
foreach $ok(sort keys %hash) #对于排序的hash每个键
{
$ov=$hash{$ok}; #原键值对存入hash
if($ok eq $nk) #若新键等于原键
{
$ov = $ov + $nv ;
$hash{$ok}=$ov; #值相加
$is=1; #标志位改变,退出hash循环
last;
}
}
if($is eq 0) #新键加入hash
{
$hash{$nk}=$nv;
}
}
}
open(fhw,'>','index_result.txt')or die $!; #最后按序写入hash
foreach $str (sort keys %hash)
{
print fhw "$str,$hash{$str}\n";
}
程序是对的,就是觉得太繁琐。请问怎么写的简洁一点呢?
谢谢! 展开
输入:多个文件,每个文件中,一行记录一个单词及其频率
输出:合并所有文件相同单词的频率,输出到一个文件。
用Hash表进行处理
程序如下:
use 5.010;
$num=@ARGV; #参数个数需要取成变量
foreach $count(0..$num-1) #索引号从0开始
{
open(FH,'<',$ARGV[$count])or die $!;
@new_array=<FH>; #indexback_i.txt内容
close(FH);
open(fhr,'<','index_result.txt') or die $!; #读原键值对
@old_array=<fhr>;
foreach $new_line(@new_array) #对于新文件的每一行
{
chomp($new_line);
($nk,$nv)= split (',', $new_line); #取新键值对
$is=0; #每个新key设立标志位,若没有相同key则加入hash
foreach $ok(sort keys %hash) #对于排序的hash每个键
{
$ov=$hash{$ok}; #原键值对存入hash
if($ok eq $nk) #若新键等于原键
{
$ov = $ov + $nv ;
$hash{$ok}=$ov; #值相加
$is=1; #标志位改变,退出hash循环
last;
}
}
if($is eq 0) #新键加入hash
{
$hash{$nk}=$nv;
}
}
}
open(fhw,'>','index_result.txt')or die $!; #最后按序写入hash
foreach $str (sort keys %hash)
{
print fhw "$str,$hash{$str}\n";
}
程序是对的,就是觉得太繁琐。请问怎么写的简洁一点呢?
谢谢! 展开
2个回答
展开全部
是麻烦多了
%hash = ();
sub add
{
my $ref = shift;
for (0..$#$ref)
{
my ($k, $v) = split(",", chomp $ref->[$_]);
$hash{$k} += $v;
}
}
for (0..$#ARGV-1) #索引号从0开始
{
open(FH,'<',$ARGV[$_])or die $!;
@new_array=<FH>;
close(FH);
add(\@new_array);
}
open(fhw,'>','index_result.txt')or die $!; #最后按序写入hash
foreach $str (sort keys %hash)
{
print fhw "$str,$hash{$str}\n";
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询