2014-12-02 32 views
1

這是我的另一組最終作業使用一個鍵(phone_no)從兩個平面文件中提取數據並打印或清除匹配記錄

這是我的最後作業。

我已經給了一個固定的平面文件withemployee列表下面。

Employee (20 bytes) title (20 bytes) Dept (13) phone (14) 

example 
ABAD, RACHEL PR CLERK ENGINEERING ENGR DIST OFC (818) 374-7538 
ABDULLAH, SOLOM SAFETY ENGR PRESS VES INSPECTIO (818) 374-9930 
ABEL, DARLA SR  SAFETY ENG ELEVATORSINSPECTION (213) 202-9839 
ABRAHAM, TERESA SR MGMT ANALYST II  RES MGMT CUS (213) 482-6766 
ABRAMYAN, DANIEL INACTIVE   NONE   NONE 
ABREU, JAMES  BUILD MECH INSPECTORCODE ENFCMNT (818) 374-9862 
ACEVEDO CASTRO, MECH ENGRG ASS  ENGINEERING (213) 202-9902 
ACOSTA, JESUS GEOTECH ENGINEER II INSPECTION GRADING (213) 482-6967 
AGHAZARIAN, SAKO SRBUILD INSPECTOR  INSPECTION BLDG(213) 482-0372 

第二個文件只包含電話號碼列表,它恰好位於員工列表的列表中。

(818) 374-9930 
(213) 202-9902 
(213) 482-0373 
(818) 374-7538 

如果有比賽,我需要提取和打印出整行(到另一個文件),但現在我測試檢查,以確保我能夠讀取哈希值。 (terminated.dat)

!/usr/bin/perl 

use strict; 
use warnings; 

open PHONELIST, "< PHONELIST.TXT" or die "could not open PHONELIST.TXT\n"; 
my $phone_no; 
while (<PHONELIST>) { 
    chomp; 
    $phone_no->{$_} = 1; 

    print "$phone_no\n"; 
} 
close PHONELIST; 

open EMPRECORD, "< EMPRECORD.TXT" or die "could not open EMPRECORD.TXT\n"; 
while (<EMPRECORD>) { 
    chomp; 
    my ($phoneKey) = ($_); 
    if (defined $phone_no->{$phoneKey}) { 
     print STDOUT "$_\n"; 
    } 
} 
close EMPRECORD; 

我無法創建哈希或數組來讀取和比較兩個文件並從列表中刪除已終止的帳戶。請告知我做錯了什麼。

回答

1

在您的代碼中,您正在將員工列表中的整行讀入$phoneKey變量。 然後您需要提取實際的電話號碼進行搜索。

我建議增加:

$phoneKey =~ s/.*(\([0-9]+\) [0-9]+\-[0-9]+)$/$1/; 

或類似的東西。

其實,看你的天賦......

$phoneKey = substr($_, -13); 

可能是一個更好的選擇。

+0

我喜歡提取而不是修改,並強制使用數字而不是使用'+'來引起錯誤。 'm /(\(\ d {3} \)\ d {3} \ - \ d {4})/;'then' $ phoneKey = $ _;' – PeterT 2014-12-02 06:47:43

+0

另外,' - >'你可以簡單地使用$ phone_no {$ phoneKey}。 ' - >'意味着一個解除引用(這是在那裏,但在語境上在語義上具有誤導性)。 – PeterT 2014-12-02 06:50:17

-1

這是因爲您沒有將EMPRECORD.TXT的行分割爲字段。你需要拆分成字段。

+0

並不總是有一個分隔符。 - 檢查最後一條記錄。 – 2014-12-02 03:45:09

+0

@JohnC哦,我錯過了。使用分割不合適。我應該寫入拆分字段而不使用拆分;) – 2014-12-02 04:22:46

相關問題