2014-02-07 49 views
0

作爲標題說,我有一個簡單的文本文件,我試圖將它分解成幾個不同的數組。下面是簡單的文本文件看起來像我試圖把一個文件,並將其分成單獨的數組perl

--ARRAY1-- 
eenie 
--ARRAY2-- 
meenie 
minie 
--ARRAY3-- 
moe 

什麼大的想法,我在我的代碼必須將遍歷這個文件,並將之間的「--Arrays--」萬事成對應數組什麼數組它在文本文件中。

##logic that loops through above text file{ 

$line =~ s/[\ ]//g; #chops off spaces 
     if($line =~/(\-\-)/){ 
       if($line =~/[ARRAY1]/){$arrayholder='array1';} 
       if($line =~/[ARRAY2]/){$arrayholder='array2';} 
       if($line =~/[ARRAY3]/){$arrayholder='array3';} 
     } 
push @"$arrayholder", "$line"; 
} 

## END LOOP LOGIC} 

我遇到的問題是與

push @"$arrayholder", "$line"; 

看來我不能使用一個變量到陣列上調用。我甚至試着做

if($line =~/[ARRAY2]/){$arrayholder='@array2';} 

無濟於事

任何幫助表示讚賞。我願意修復我的整個邏輯。由於

+3

http://perl.plover.com/varvarname.html解釋了爲什麼兩個答案使用的家鄉地址,而不是變量的變量名。 – ikegami

+1

謝謝你。這是一個很好的閱讀。 – whit3y

回答

1

考慮一個hash-of-arrays data structure

use warnings; 
use strict; 

my %hoa; 
my $arr; 
while (<DATA>) { 
    chomp; 
    if (/^--(\w+)/) { 
     $arr = $1; 
     next; 
    } 
    else { 
     push @{ $hoa{$arr} }, $_; 
    } 
} 

use Data::Dumper; 
$Data::Dumper::Sortkeys=1; 
print Dumper(\%hoa); 

__DATA__ 
--ARRAY1-- 
eenie 
--ARRAY2-- 
meenie 
minie 
--ARRAY3-- 
moe 

此打印出:

$VAR1 = { 
      'ARRAY1' => [ 
         'eenie' 
         ], 
      'ARRAY2' => [ 
         'meenie', 
         'minie' 
         ], 
      'ARRAY3' => [ 
         'moe' 
         ] 
     }; 
+0

看來,我們同意:)不需要在正則表達式中跳過連字符。 – Borodin

+0

我同意:)更新。 – toolic

+0

感謝您的幫助。我能夠得到我需要的工作才能工作。它的醜陋,但它不是我無法打磨的東西。非常感謝您花時間幫助我。 – whit3y

2

如果我理解正確,那麼我建議你使用數組引用的哈希。像這樣

use strict; 
use warnings; 

my %data; 
my $array; 

while (<DATA>) { 
    chomp; 
    if (/^--(\w+)--/) { 
    $array = $1; 
    } 
    elsif ($array) { 
    push @{ $data{$array} }, $_; 
    } 
} 

use Data::Dump; 
dd \%data; 

__DATA__ 
--ARRAY1-- 
eenie 
--ARRAY2-- 
meenie 
minie 
--ARRAY3-- 
moe 

輸出

{ ARRAY1 => ["eenie"], ARRAY2 => ["meenie", "minie"], ARRAY3 => ["moe"] } 
相關問題