2012-07-26 5 views
2

해시의 해시 해시 값 (끝이없는 값)을 CSV로 인쇄하려고합니다.[해시] * 해시의 해시를 인쇄하는 방법 perl의 CSV로 *

나는 가장 깊은 해시 키가 숫자 스칼라를 가리키는 곳인 foos, bars, cars ...의 구조를 가지고 있다고 상상해보십시오.

내가 같이이 구조를 인쇄 할 : 당신이 해시 구조의 깊이를 인식하지있을 때

foo1;bar1;car1;345 
foo1;bar1;car2;25347 
foo1;bar2;car1;23 
foo2;bar1;car1;863 
...... 
...... 

아무도,이 작업을 수행하는 방법을 알고 있나요 (도 추가가있을 수 화성과 전쟁 등)?

지금까지 어떤 시도를 했습니까?

sub print_csv { 
    my $subj = shift; 
    if (ref($subj) eq "HASH") { 
     for (keys $subj) { 
      print "$_;"; 
      print_csv($subj->{$_}); 
     } 
    } 
    else { 
     print "$subj\n"; 
    } 
} 

이것은 일반적인 생각이지만 처음부터 해시의 키는 반복되지 않습니다.

미리 감사드립니다.

편집
저는 이미 perl 5.14를 사용하고 있습니다. 내 문제는 해시 키가 처음 나타난 후에 반복되지 않는다는 것입니다. 내 전류 출력은 다음과 같습니다

foo1;bar1;4 
foo2;bar2;12060 
bar3;24 
bar1;152 
foo3;bar3;1 
bar1;815 

에서는 foo2는 3 개의 바 (BAR1, 바 2, 왈져)을 가지고 있지만 그것은 foo3와 동일합니다 라인 3과 4에서 반복되지 않는 이름 '에서는 foo2 "입니다. 나는 이것이 당신이 원하는 생각, 그것은 두 개의 바 (BAR1 및 왈져)를 가지고 있지만, 이름이 "foo3은"6

+0

,'keys' 행복 대신 해시의 hashref을 받아들입니다. 업그레이드를 고려해야합니다. – Borodin

답변

3

이제 알았어 라인에서 누락되어있다 :

sub print_csv { 
    my $subj = shift; 
    my $prefix = shift || ""; 
    if (ref($subj) eq "HASH") { 
     for (keys %$subj) { 
      print_csv($subj->{$_}, $prefix ."$_;"); 
     } 
    } 
    else { 
     print "$prefix$subj\n"; 
    } 
} 

데이터 :

my %hash =(); 
my %hash2 =(); 
my %hash3 =(); 

$hash3{"test3Key"}="test5"; 
$hash2{"test2Key"}=\%hash3; 
$hash2{"test2Key2"}="test2Key2Value"; 
$hash{"testSimpleKey"} = "test2"; 
$hash{"testHashRefKey"}=\%hash2; 

결과 :이 나중에 펄 v5.14에 잘 작동하고

testSimpleKey;test2 
testHashRefKey;test2Key;test3Key;test5 
testHashRefKey;test2Key2;test2Key2Value 
+0

그게 다야! 너는 내 친구 야 :) – Turbokiwi

관련 문제