2011-02-10 61 views
1

我有兩個文件,CUSTOMER_ACCOUNT_LOG.TXT,CUSOMER_ID_LOG.TXT。如何使用Perl匹配兩個文件中的記錄?

是這個被記錄,保持時間戳和帳戶ID,同樣置身於另一個文件的時間戳和客戶ID,

簡單,我要挑的AccountID和客戶ID與匹配的時間戳,

例如, 123456793是TIMESTAMP,對於這個Equlent比賽記錄ABC0103,CUSTOMER_ID_0103,

這樣我要挑detaild,需要使這些匹配的記錄wrtite到另一個文件,

CUSOMER_ACC OUNT_LOG.TXT

TIMESTAMP| N1| N2 |ACCOUNT ID 
----------------------------------- 
123456789,111,1000,ABC0101 
123456791,112,1001,ABC0102 
123456793,113,1002,ABC0103 
123456795,114,1003,ABC0104 
123456797,115,1004,ABC0105 
123456799,116,1005,ABC0106 
123456801,117,1006,ABC0107 
123456803,118,1007,ABC0108 
123456805,119,1008,ABC0109 
123456807,120,1009,ABC0110 
123456809,121,1010,ABC0111 
123456811,122,1011,ABC0112 
123456813123,1012,ABC0113 
123456815,124,1013,ABC0114 
123456817,125,1014,ABC0115 
123456819,126,1015,ABC0116 
123456821,127,1016,ABC0117 
123456823,128,1017,ABC0118 
123456825,129,1018,ABC0119 
123456827,130,1019,ABC0120 
123456829,131,1020,ABC0121 

CUSOMER_ID_LOG.TXT

TIMESTAMP| N1| N2 | CUSTOMER ID 
----------------------------------- 
123456789,111,1000,CUSTOMER_ID_0101 
123456791,112,1001,CUSTOMER_ID_0102 
123456793,113,1002,CUSTOMER_ID_0103 
123456795,114,1003,CUSTOMER_ID_0104 
123456797,115,1004,CUSTOMER_ID_0105 
123456799,116,1005,CUSTOMER_ID_0106 
123456801,117,1006,CUSTOMER_ID_0107 
123456803,118,1007,CUSTOMER_ID_0108 
123456805,119,1008,CUSTOMER_ID_0109 
123456807,120,1009,CUSTOMER_ID_0110 
123456809,121,1010,CUSTOMER_ID_0111 
123456811,122,1011,CUSTOMER_ID_0112 
123456813123,1012,CUSTOMER_ID_0113 
123456815,124,1013,CUSTOMER_ID_0114 
123456817,125,1014,CUSTOMER_ID_0115 
123456819,126,1015,CUSTOMER_ID_0116 
123456821,127,1016,CUSTOMER_ID_0117 
123456823,128,1017,CUSTOMER_ID_0118 
123456825,129,1018,CUSTOMER_ID_0119 
123456827,130,1019,CUSTOMER_ID_0120 
123456829,131,1020,CUSTOMER_ID_0121 

我是一個PHP程序設計師,以及新的Perl。

首先我讀的文件,然後我就maded陣列,現在我的數組包含的必要細節timestampe休息,其實我應該知道的?我們應該讀取文件和fille值到數組中,所以猜猜,數組鍵應該包含Account ID和數組值,應該是timestamp,反之不能確定,像另一個文件一樣,最後我們應該比較時間戳,哪些時間戳匹配,然後時間戳帳戶ID和客戶ID我們應該選擇,直到我知道我填充陣列,現在我不知道如何進一步進行,因爲,這裏應該使用foreach,然後需要匹配noth文件時間戳,我卡在這裏!

+0

PLZ讀我的更新 – Bharanikumar 2011-02-10 17:22:34

回答

9

下面是步驟我會帶:

0)一些基本的Perl樣板(這是一步0,因爲你以後都應該始終做到這一點,有些人會添加其他的東西,這個樣板,但這是最低限度):

use strict; 
use warnings; 
use 5.010; 

1)讀取所述第一文件轉換爲哈希的鍵是時間戳:

my %account; 
open(my $fh1, '<', $file1) or die "$!"; 
while(my $line = <$fh1>) { 
    my @values = split ',', $line; 
    $account{$values[0]} = $values[3]; 
} 
close $fh1; 

2)讀取所述第二文件,並且每次讀出的利ne,取出時間戳,然後將時間戳,帳戶ID和客戶ID打印到新文件中。

open(my $out_fh, '>', $outfile) or die "$!"; 
open(my $fh2, '<', $file2) or die "$!"; 
while(my $line = <$fh2>) { 
    my @values = split ',', $line; 
    say $out_fh join ',', $values[0], $account{$values[0]}, $values[3]; 
} 
close $out_fh; 
close $fh2; 

您不想將整個文件讀入數組,因爲這會浪費內存。只存儲您需要的信息,並利用Perl的數據類型來幫助您存儲該信息。

+1

不要忘記跳過標題行。 – Tim 2011-02-10 17:34:52

相關問題