2013-05-21 99 views
3

我想加載一個帶有4列和多行的文件到一個哈希中,我需要通過包含字母數字數據的第一個字段與另一個文件組合它比賽日期,這裏是我的數據樣本:如何將2個文件與4列組合成哈希perl

file 1: 
AOKX 495408, L, 04/02/13, SWCOMP 
AOKX 495408, L, 04/20/13, SWCOMP 
BLHX 102, L, 04/01/13, WILDCOM 
CRDX 7067, L, 04/05/13, TYCO 
WW  9030, L, 04/02/13, HALLI 

file2: 
AOKX 495408, L, 04/15/13, SWCOMP 
BLHX 102, L, 04/03/13, WILDCOM 
CRDX 7067, L, 04/20/13, TYCO 
WW  9030, L, 04/30/13, HALLI 
BLHX 102, L, 04/30/13, WILDCOM 

output file needs to look like: 
AOKX 495408 L 04/02/13 04/15/13 SWCOMP 
BLHX 102 L 04/02/13 04/03/13 WILDCOM (more than 1 date exists 04/30/13) 

這裏是我迄今爲止 - 它因此完全不工作 - 測試時,想要打印的內容爲$關鍵是給我第二場。我似乎無法得到這個更多的2個領域的工作。所以我被困在這裏。

my %hash; 

open FILE1, "<", "out1.txt" or die "$!\n"; 

while (<FILE1>) { 
chomp $_; 
my ($key, $le, $date, $company) = split ',', $_; 
$hash{$key} = $le, $date, $company; 
    push @{ $hash{$key} }, $_; 
} 

close FILE1; 

我將格式更改爲[$ le,$ date,$ company]非常感謝。我的下一個問題是我無法弄清楚如何將這兩個文件中的數據讀入哈希中。我需要能夠匹配第一個字段(車號)和兩個文件中的日期。任何一個文件我都有多個日期列表。如果不存在日期,它仍然被寫出。如果多個日期我真的需要匹配彼此最近的日期。 (例如04/01/2013 04/05/2013然後04/06/2013 04/30/2013)我希望這是有道理的。

所以這是我迄今爲止(非常基本只是想弄清楚每一個步驟)任何幫助是非常讚賞,因爲我剛學,真正需要做這項工作... THX

#!/usr/bin/perl 
# 
use strict; 
use warnings; 

my $cnt = 0; 
open FILE1, "<", "out1.txt" or die "$!\n"; 

my %hash; 

while (<FILE1>) { 
    chomp $_; 
    my ($key, $le, $date, $company) = split ',', $_; 
    $hash{$key} = [$le, $date, $company]; 
    push @{ $hash{$key} }, $_; 
    $cnt++; 
# print "$key $date\n"; 
} 

print "total pcon records processed: $cnt\n"; #just to verify all records read 
$cnt=0; 

close FILE1; 

open FILE2, "<", "out2.txt" or die "$!\n"; 
open OUTFILE, ">", "final.txt" or die "$!\n"; 

while (<FILE2>) { 
    my ($rkey, $rle, $rdate, $rcompany) = split ',', $_; 
    $hash{$rkey} = [$rle, $rdate, $rcompany]; 
    push @{ $hash{$rkey} }, $_; 
    $cnt++; 
# print OUTFILE "\n"; #to write out once figure out how to combine 

} 
print "total rcpl records processed: $cnt\n"; #just to verify all records read 

close FILE2; 
close OUTFILE; 

需要輸出的樣子:

AOKX 495408 L 04/02/13 04/15/2013 SWCOMP 
AOKX 495408 L 04/20/13   SWCOMP 
BLHX 102 L 04/01/13 04/03/2013 WILDCOM 
BLHX 102 L   04/30/2013 WILDCOM 
+0

對於文件1中的公司,還是隻有文件2中可能有多個日期? –

+0

是的,這是可能的..thx – user2406898

+0

你能給出一個預期產出的例子 – user1937198

回答

4

當perl的看到線

$hash{$key} = $le, $date, $company; 

它解釋這作爲列表分配從列表($le, $date, $company)到列表($hash{$key}),其將每個項目從第一列表分配到第二列表中的匹配項目,並丟棄沒有匹配項目的任何項目。你想要做的是將包含值的數組引用包含到像這樣的散列鍵

$hash{$key} = [$le, $date, $company]; 
+0

謝謝真的幫助現在停留在下一步 – user2406898