我有一个问题,我希望有人可以提供帮助。
我有一个名为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
中指定年龄的情况?我知道如果它具有固定/已知深度,如何制作和访问散列/散列引用的不同部分,但是当数据结构可能具有不同深度时,最好的方法是什么?
非常感谢您的帮助,谢谢
答案 0 :(得分:1)
存储空白年龄值时应该没有问题!
这是一个值,密钥必须在哈希数据结构中是唯一的。
你做的方式是对的!
否则,如果你把它变成空白会更好。
即:
my ( $gender, $firstName, $middleName, $lastName, $age) = split("\t") ;
if($age =~ /\d+/) {
$details->{$gender}->{$firstName}->{$lastName} = "$age";
} else {
$details->{$gender}->{$firstName}->{$lastName} = "";
}
答案 1 :(得分:0)
您可以替换示例代码的这一行
$details->{$gender}->{$firstName}->{$lastName} = "$age";
这一个:
$details->{$gender}->{$firstName}->{$lastName} = "$age" if $age;
但是现在你将错过最终数据结构中没有年龄的记录,我不知道你的任务是否合适。
同样在您的代码中,您的年龄值包含在字符串中:"$age"
,所以当存在时
没有年龄你得到空字符串值,这本身表明该记录没有年龄。