解析文本文件并将字段存储在Perl的哈希表中 [英] Parse text file and store fields in hash table in Perl

查看:236
本文介绍了解析文本文件并将字段存储在Perl的哈希表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的perl脚本出现问题,该脚本读取一个文本文件并存储由列表隔开的第一个字段.

i have a problem with my perl script which read a text file and store the first field separated by a tabulation.

这里有一个例子: 文本输入文件:

Here an example: texte input file :

@ 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

因此,脚本必须存储每行的第一个字段并将其存储在此处的哈希表中:"@ riesbléliosquesélectroniquesàtravers tout le","aa pour les ressortissants des nouveauxétats",abandonnédèsl abord" avec dilettantisme",放弃纤维文化",放弃教宗的放弃".

So the script must store the first fields from each line and store them in a hash table here: '@ ries bibliothèques électroniques à travers tout le', 'a a pour les ressortissants des nouveaux états', 'a abandonné dès l abord avec dilettantisme', 'a abandonné la culture du lin à fibres', 'a abandonné 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";

  }

问题在于此脚本不起作用:(有任何想法吗?

The problem is that this script does not work :( Any idea please?

推荐答案

此代码的简单(适度简单)修改:

This simple (moderately simple) adaptation of your code:

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

(其中多个空格代表文件中的一个选项卡,给出输出:

(where multiple blanks represent a tab in the file, gives the output:

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

如果这不是您想要的,也许您需要指定每个键应存储什么值.

If that's not what you're after, maybe you need to specify what value should be stored with each key.

my($key, $count, $number)部分将每行三个字段保存到命名变量中.该行:

The my($key, $count, $number) part saves three fields per line into the named variables. The line:

$hash{$key} = [ $count, $number ];

使用字符串$key创建一个存储数组引用的哈希条目,该数组包含两个值$count$number.和线

creates a hash entry with the string $key storing an array reference, where the array contains two values, $count and $number. And the line

print "$key => @{$val}\n";

打印由$val引用的数组.

要求仍然不清楚,但是显然只需要存储密钥.目前尚不清楚将其存储在数组中是否足够,或者是否必须将其存储在哈希中.

The requirements are still unclear, but apparently, only the key needs to be stored. It is not clear whether it is sufficient to store it in an array, or whether it must be stored in a hash.

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

这篇关于解析文本文件并将字段存储在Perl的哈希表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆