2015-04-03 128 views
1

我如何循環第一行中的每個元素,然後移動到第二行等。 下面的腳本有點工作,但我沒有得到所需的輸出。 有人可以幫助我嗎。Perl通過陣列哈希循環

的test.txt

ABC-13077 817266 55555 
ABC-13092 816933 
CAMC-13093 817361 

script.pl

#!/usr/bin/perl -w 
use strict; 

my %hash =(); 
my $file = "test.txt"; 

open (my $fh, "<", $file) or die "Can't open the file $file: "; 

while (my $line =<$fh>) 
{ 
    chomp ($line); 
    my($key) = split(/\+s/, $line); 
    $hash{$key} = 1; 
} 

foreach my $key (keys %hash) 
{ 
    print "$key\n"; 
    print "loop\n"; 
} 

電流output.txt的

ABC-13077 817266 55555 
loop 
ABC-13092 816933 
loop  
CAMC-13093 817361 

期望output.txt的

ABC-13077 
817266 
55555 
loop 
ABC-13092 
816933 
loop  
CAMC-13093 
817361 

回答

1

首先,您需要將/\+s/更改爲/\s+/

其次,你可以在你的數據存儲到一個散列的陣列(perldsc):

use warnings; 
use strict; 
my %hash =(); 

while (my $line =<DATA>) 
{ 
    chomp ($line); 
    my ($key, @vals) = split(/\s+/, $line); 
    $hash{$key} = [@vals]; 
} 

foreach my $key (sort keys %hash) 
{ 
    print "$key\n"; 
    print "$_\n" for @{ $hash{$key} }; 
    print "loop\n"; 
} 

__DATA__ 
ABC-13077 817266 55555 
ABC-13092 816933 
CAMC-13093 817361 

輸出:

ABC-13077 
817266 
55555 
loop 
ABC-13092 
816933 
loop 
CAMC-13093 
817361 
loop 
+1

它的工作!謝謝你的快速反應.. – Mihir 2015-04-03 17:37:48