我的perl脚本存在问题,该脚本读取文本文件并存储由制表符分隔的第一个字段。
这是一个例子: texte输入文件:
@ ries bibliothèques électroniques à travers tout le 1 0.000012706627117
a a pour les ressortissants des nouveaux états 1 0.000006796917515
a abandonné dès l abord avec dilettantisme l 1 0.000009584625169
a abandonné la culture du lin à fibres 1 0.000009718010335
a abandonné le secteur de la pêche aux 1 0.000006983488644
因此脚本必须存储每行的第一个字段并将它们存储在哈希表中:'@riesbibliothèquesélectroniquesàtraverstout le','aa pour les ressortissants desnouveauxétats','aabandonnédèslabord avec dilettantisme','aabandonnélaculture dulinàfiber','aabandonnélesecteur delapêcheaux'。
这是脚本:
#!/usr/bin/perl -w
# use strict;
my %hash = ();
open (my $fh,"<", "tst") or die "Can't open the file: ";
while (my $line =<$fh>){
chomp ($line);
my ($key)=split("\t", $line);
my $val;
$hash{$key} =$val;
}
print "\n";
while ( my ($key, $val) = each(%hash) ) {
print "$key => $val\n";
}
问题是这个脚本不起作用:(请知道吗?
答案 0 :(得分:1)
这种简单(适度简单)的代码改编:
#!/usr/bin/perl -w
use strict;
my %hash = ();
my $file = "tst";
open (my $fh, "<", $file) or die "Can't open the file $file: ";
while (my $line =<$fh>)
{
chomp ($line);
my($key, $count, $number) = split("\t", $line);
$hash{$key} = [ $count, $number ];
}
while (my($key, $val) = each(%hash))
{
print "$key => @{$val}\n";
}
给出输入文件:
@ ries bibliothèques électroniques à travers tout le 1 0.000012706627117
a a pour les ressortissants des nouveaux états 1 0.000006796917515
a abandonné dès l abord avec dilettantisme l 1 0.000009584625169
a abandonné la culture du lin à fibres 1 0.000009718010335
a abandonné le secteur de la pêche aux 1 0.000006983488644
(其中多个空格表示文件中的选项卡,给出输出:
a a pour les ressortissants des nouveaux états => 1 0.000006796917515
@ ries bibliothèques électroniques à travers tout le => 1 0.000012706627117
a abandonné la culture du lin à fibres => 1 0.000009718010335
a abandonné dès l abord avec dilettantisme l => 1 0.000009584625169
a abandonné le secteur de la pêche aux => 1 0.000006983488644
如果那不是您所追求的,也许您需要指定每个键应存储的值。
my($key, $count, $number)
部分将每行三个字段保存到命名变量中。这一行:
$hash{$key} = [ $count, $number ];
创建一个散列条目,其中包含存储数组引用的字符串$key
,其中数组包含两个值$count
和$number
。行
print "$key => @{$val}\n";
打印$val
引用的数组。
要求仍然不明确,但显然,只需要存储密钥。目前尚不清楚将其存储在数组中是否足够,或者是否必须将其存储在散列中。
#!/usr/bin/perl -w
use strict;
my @array = ();
my $file = "tst";
open (my $fh, "<", $file) or die "Can't open the file $file: ";
while (my $line =<$fh>)
{
chomp ($line);
my($key) = split("\t", $line);
push @array, $key;
}
foreach my $key (@array)
{
print "$key\n";
}
#!/usr/bin/perl -w
use strict;
my %hash = ();
my $file = "tst";
open (my $fh, "<", $file) or die "Can't open the file $file: ";
while (my $line =<$fh>)
{
chomp ($line);
my($key) = split("\t", $line);
$hash{$key} = 1;
}
foreach my $key (sort keys %hash)
{
print "$key\n";
}