【问题标题】:Read file into two hashes with Perl使用 Perl 将文件读入两个散列
【发布时间】:2020-05-14 11:38:07
【问题描述】:

我很难理解如何将一个简单的文本文件读入两个 Perl 哈希。

我有一个文本文件,例如:

George Washington
John Adams
Abraham Lincoln

我想创建两个散列,一个包含名字,另一个包含姓氏。

我正在考虑做类似的事情:

my %first;
my %last;
open(my $FH, '<', $file) or die$!;
my $count = 1;
while (<$FH>)
{
  chomp;
  if count is odd, add to %first
    elsif count is even, add to %last
}
close($FH);

但我真的迷路了。有人有什么想法吗?


【问题讨论】:

  • 提示:split 是你的朋友
  • 可以split行,并解析得到的列表;这将是对所问内容的直接回答。但是......第一个元素是名字,第二个元素......等等,如果有两个以上的单词怎么办?您从事的是解析名称的复杂业务。也许使用图书馆?
  • 你想要什么哈希值?什么是键,什么是值?
  • 这没有任何意义。整数不会帮助您在以名称为键的散列中查找元素。请澄清
  • 将相关数据存储在两个独立的数据结构中是一个糟糕的主意。为什么你认为你需要这样做?

标签: perl


【解决方案1】:

您可以使用以下代码获得所需的结果。

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my $count = 0;
my %first;
my %last;

while(<DATA>) {
    chomp;
    my($f,$l) = split;
    $first{$f} = $count;
    $last{$l} = $count;
    $count++;
}

say Dumper(\%first);
say Dumper(\%last);


__DATA__
George Washington
John Adams
Abraham Lincoln

输出

$VAR1 = {
          'George' => 0,
          'Abraham' => 2,
          'John' => 1
        };

$VAR1 = {
          'Adams' => 1,
          'Lincoln' => 2,
          'Washington' => 0
        };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2011-08-22
    • 2017-02-21
    • 2019-10-26
    • 2015-05-04
    • 2016-05-23
    • 2020-01-29
    相关资源
    最近更新 更多