0

誰かが助けてくれることを望んでいる質問があります。

というタブ区切りのテキスト ファイルがありますFILE.txt

(年齢のうち 2 つが欠落していることに注意してください):

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

0

サンプルコードのこの行を置き換えることができます

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

これで:

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

しかし、最終的なデータ構造から年齢のないレコードを見逃してしまいます。あなたのタスクに問題がないかどうかはわかりません。

また、コードには年齢値が string:"$age"でラップされているため、年齢がない場合は空の文字列値を取得します。これは、それ自体でこのレコードに年齢がないことを示します。

于 2013-04-23T12:31:17.970 に答える