使用密钥(phone_no)从两个平面文件中提取数据并打印或清除匹配记录

时间:2014-12-02 03:08:06

标签: perl

这是我最后一次作业的另一套

这是我的最终作业。

我已经获得了一个固定的平面文件,位于下面的员工列表中。

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;

我无法创建哈希或数组来读取和比较这两个文件,并从列表中删除已终止的帐户。请告诉我我做错了什么。

2 个答案:

答案 0 :(得分:1)

在您的代码中,您正在阅读员工列表中的整行到$phoneKey变量。 然后,您需要提取实际的电话号码进行搜索。

我建议添加:

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

或类似的东西。

实际上,看看你的规格......

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

可能是更好的选择。

答案 1 :(得分:-1)

那是因为你没有将EMPRECORD.TXT行分割成字段。您需要拆分为字段。