2016-05-04 25 views
1

こんにちは私はperlで新しく、1つの問題を抱えています。私は値としていくつかの行を保存したいという点でハッシュのハッシュを作成しています。私は価値のある行だけを歌っています。ハッシュ値のハッシュに複数の行を格納する方法

FILE.TXT

family(){ 
kapoor(){ 
member1(){ 
male(){ 
between : 0 to 5 
person : 2 
their name is bla & bla. 
and bla bla...... 
blaa..... 
} 

male(){ 
between : 5 to 5 
person : 20 
their name is bla & bla bla. 
and bla bla...... 
blaa..... 
} 
} 

member2(){ 
male(){ 
between : 0 to 5 
person : 2 
their name is bla & bla. 
and bla bla...... 
blaa..... 
} 

male(){ 
between : 5 to 5 
person : 20 
their name is bla & bla bla. 
and bla bla...... 
blaa..... 
} 
} 
} 


rai(){ 
member1(){ 
male(){ 
between : 0 to 5 
person : 2 
their name is bla & bla. 
and bla bla...... 
blaa..... 
} 

male(){ 
between : 5 to 5 
person : 20 
their name is bla & bla bla. 
and bla bla...... 
blaa..... 
} 
} 

member2(){ 
male(){ 
between : 0 to 5 
person : 2 
their name is bla & bla. 
and bla bla...... 
blaa..... 
} 

male(){ 
between : 5 to 5 
person : 20 
their name is bla & bla bla. 
and bla bla...... 
blaa..... 
} 
} 
} 

O/Pは次のよ​​うになります。

family=>{ 

    kapoor => { 
       member1=>{ 
          0 to 5=> person : 2 
            their name is bla & bla. 
            and bla bla...... 
            blaa..... 

          } 
       member2=> { 
          5 to 5 => person : 20 
            their name is bla & bla bla. 
            and bla bla...... 
            blaa..... 

       } 

rai =>{ 
/...................etc 
} 

私はここで

family=>{ 

    kapoor => { 
       member1=>{ 
          0 to 5=> person : 2 
                    } 
       member2=> { 
          5 to 5 => person : 20 

       } 

rai =>{ 
/...................etc 
} 

のような、価値の唯一の単一の行を取得しています、私が試したものです:

while(my$line=<$fh>) 
    { 

    if($line=~/$family_name_re/) 
    { 
     $family_name=$1; 
    $family_count=$cell_count+1; 
    } 
    elsif ($line=~/$member_re/) 
    { 
    $member = $1; 
} 
    elsif ($line=~/$age_re/) 
{ 
    $age_range=$1; 

    $data{$family_name}{$member}{$age_range}=$line; 
    } 
} 
    print Dumper(\%data); 
    print "Number of cell is $cell_count\n"; 

close ($fh); 

値に複数の行を割り当てる方法がわかりません。私は値を割り当てる際に試しましたが、うまくいきませんでした。

+1

最後 'elsif'に、あなたは' $ LINE1 = <$fh> '、' $ LINE2 = <$fh> '、などのように次の行(3または任意の必要な行数)を取得することができます。.. – Sundeep

+1

あなたの入力ファイルは非常に混乱しています:入れ子が正しくない(member1は2人の男性です)、あなたは男性グループを無視します。また、あなたが作業している正規表現を私たちに与えないので、あなたのコードは不完全です。 @spasicが述べたように、現在のところ、ファイルから行ごとのデータを読み込み/格納するだけなので、何らかの理由でより多くの行を読み込む必要があります。それが今の中核的な問題です。 – eballes

+0

ebailesによると、ファイル形式とその構文解析はあまり意味がありません。あなたのハッシュ割り当てはうまくいくように見えます(ただし、 '$ line'が実際に何であるかは明確ではありません)。正確な形式で正規表現を表示してください。 – zdim

答えて

1

%データがHoHoHoHoHになり、あなただけがHoHoHoHを持っているように見えます。あなたはこの仕事をするために

$data{$family_name}{$member}{$age_range}= {5 to 5 => person : 20, 
           their name => bla & bla bla, 
           bla => bla bla, 
           ... 
           } 

をしたいたとえば は、あなたが理由です、 をインポートコードをきれいにし、特にちょうどHoHoHoHあるライン

$data{$family_name}{$member}{$age_range}=$line; 

を修正したいことがあります出力は 1行だけで、あなたが望むようなハッシュではありません。

ので、助け

$data{$family_name}{$member}{$age_range}=%lines; 

希望のような擬似コードS/Bの何かによって。

0

私は答えた:

プッシュ@ {$ {$データのFAMILY_NAME} {$メンバー} {$のage_range}}、$ラインを。

:)

関連する問題