0

我有一个问题希望有人能帮忙。

我有一个制表符分隔的文本文件,名为FILE.txt

(注意缺少两个年龄):

BOY    Fred      Smith     56
BOY    David     Jones     18
GIRL   Anne      Roberts   
BOY    Fred      Andrews
GIRL   Hannah    Williams  27

我想将文本文件读入哈希/哈希引用数据结构(如下所示):

open my $f, '<', 'FILE.txt';
my $details;
while (<$f>) {
    chomp;
    my ( $gender, $firstName, $middleName, $lastName, $age) = split("\t");
    $details->{$gender}->{$firstName}->{$lastName} = "$age";
}
  • 这是制作结构的正确方法吗,因为有时文本文件中可能没有年龄?

有了这个散列/散列参考结构,我想打印人们的详细信息,但因为有些人没有年龄。这会导致散列中的空值和未初始化值等问题。

这是它产生的数据:

{
  BOY  => { David => { Jones => 18 }, Fred => { Andrews => "", Smith => 56 } },
  GIRL => { Anne => { Roberts => "" }, Hannah => { Williams => 27 } },
}
  • 您如何适应此人没有指定年龄的情况FILE.txt
  • 如果这个数据结构的深度是可变的,你如何正确地制作它,然后正确地访问它?

如果哈希/哈希引用的深度是固定/已知的,我知道如何制作和访问它的不同部分,但是当数据结构可能有不同的深度时,最好的方法是什么?

非常感谢您的帮助,谢谢

4

2 回答 2

1

存储年龄的空白值应该没有问题 !

它是一个值,键在哈希数据结构中必须是唯一的。

你的做法是对的!

否则,将其设为空白会更好。

IE:

my ( $gender, $firstName, $middleName, $lastName, $age) = split("\t") ;
if($age =~ /\d+/) {
   $details->{$gender}->{$firstName}->{$lastName} = "$age"; 
} else {
   $details->{$gender}->{$firstName}->{$lastName} = ""; 
}
于 2013-04-23T12:05:39.557 回答
0

您可以替换这行示例代码

$details->{$gender}->{$firstName}->{$lastName} = "$age";

有了这个:

$details->{$gender}->{$firstName}->{$lastName} = "$age" if $age;

但是现在你会从你的最终数据结构中错过没有年龄的记录,我不知道你的任务是否可以。

同样在您的代码中,您的年龄值包含在 string:"$age"中,因此当没有年龄时,您会得到空字符串值,这本身表明该记录没有年龄。

于 2013-04-23T12:31:17.970 回答