0

我的 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

因此脚本必须存储每行的第一个字段并将它们存储在此处的哈希表中:'@ries bibliothèques électroniques à travers tout le'、'aa pour les ressortissants des nouveaux états'、'a bypassné dès l abord avec dilettantisme' , 'a放弃的 laculture du lin à fibers', 'a放弃的 le secteur de la pêche aux'。

这是脚本:

#!/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";

  }

问题是这个脚本不起作用:(有什么想法吗?

4

1 回答 1

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";
}
于 2013-06-18T04:44:20.427 回答