2013-04-23 3 views
0

나는 누군가가 도울 수 있기를 바라고있다.Perl - 가변 깊이의 해쉬 참조 구조

(시대의 두 누락주의) :

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

내가 해시/해시 참조 데이터로 텍스트 파일을 읽을 수

나는 탭으로 구분 된 텍스트 파일이 FILE.txt라는이 구조 (아래 표시되는 내용과 같은) :

open my $f, '<', 'FILE.txt'; 
my $details; 
while (<$f>) { 
    chomp; 
    my ($gender, $firstName, $middleName, $lastName, $age) = split("\t"); 
    $details->{$gender}->{$firstName}->{$lastName} = "$age"; 
} 
  • 이 구조 BECA을 할 수있는 올바른 방법인가 때로는 텍스트 파일에 나이가 없을 수도 있습니다.

이 해시/해시 참조 구조를 사용하여 사람들의 세부 정보를 인쇄하고 싶지만 사람들 중 일부는 연령이 없기 때문에 인쇄합니다. 이것은 해시 값과 단위 화 된 값 등에서 빈 값에 문제를 일으 킵니다.

{ 
    BOY => { David => { Jones => 18 }, Fred => { Andrews => "", Smith => 56 } }, 
    GIRL => { Anne => { Roberts => "" }, Hannah => { Williams => 27 } }, 
} 
  • 어떻게 사람이 나이가 FILE.txt에 지정하지 않는 인스턴스를 수용 할 : 여기

    는 생산 데이터입니까?
  • 가변 깊이의 데이터 구조를 올바르게 작성한 다음 올바르게 액세스하려면 어떻게해야합니까?

고정/알려진 깊이의 해시/해시 참조의 다른 부분을 만들고 액세스하는 방법을 알고 있지만 데이터 구조가 다른 깊이를 가질 수있을 때이를 수행하는 가장 좋은 방법은 무엇입니까?

당신의 도움이 많이 감사

+0

연령대는 모두 같은 깊이이지만 때로는 비어 있습니다. – Barmar

+0

@Barmar - 비어 있어도 괜찮습니다. 가장 좋은 방법은 무엇입니까? –

+0

키에 중요한 데이터가 있으므로이 데이터는 모범 사례처럼 보입니다. 빈 값을 저장하지 않으면 이름이 손실됩니다. 이러한 빈 값을 처리하는 방법은 나머지 응용 프로그램이 수행하는 작업에 따라 다릅니다. – Barmar

답변

1

시대의 값을 저장에 문제가 안됩니다 감사합니다!

값이므로 해시 데이터 구조에서 키가 고유해야합니다.

당신이 한 방법은 옳습니다!

그렇지 않으면 비워 두는 것이 좋습니다.

예 :에서 세없이

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

하지만 지금 당신이 놓친 것이다 기록 :이 한 개 예제 코드

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

이 라인을 대체 할 수

my ($gender, $firstName, $middleName, $lastName, $age) = split("\t") ; 
if($age =~ /\d+/) { 
    $details->{$gender}->{$firstName}->{$lastName} = "$age"; 
} else { 
    $details->{$gender}->{$firstName}->{$lastName} = ""; 
} 
0

최종 데이터 구조, 나는 당신의 작업에 괜찮은지 모르겠다.

또한 코드에 연령대 값이 "$age"이므로, 연령이 없으면 빈 문자열 값을 얻습니다.이 값 자체는이 레코드의 나이가 없음을 나타냅니다.