通过将一个数组中的记录与Perl中另一个数组中的唯一名称列表进行匹配来创建单个文件

问题描述 投票:0回答:2

我有两个文件:

[文件1包含唯一的名称列表,文件2包含具有附加数据的名称列表。

注意:文件2可以有多个相同名称的记录。

例如:

文件1:

ARRON LYNCH
PATRICK MOLONEY
JAMIE MOTT
MICHELLE PAYNE
DANIEL STACKHOUSE
JORDAN CHILDS
LUKE NOLEN
... etc.

文件2:

ARRON LYNCH,WANGARATTA,RACE 1,BILLIEO (1),MARK STEPHENSON,C,1
PATRICK MOLONEY,WANGARATTA,RACE 1,DALLAS COWGIRL (2),BRENT STANLEY,CC,1
JAMIE MOTT,WANGARATTA,RACE 1,FREE FLYING STAR (3),JOHN MCARDLE,BBB,1
JAMES WINKS,WANGARATTA,RACE 2,AMERICAN WHISKEY (1),MICHAEL, WAYNE & JOHN HAWKES,BBB,2
TEODORE NUGENT,WANGARATTA,RACE 2,MATSUMOTO (2),MITCHELL BEER,CC,2
ALEXANDRA BRYAN,WANGARATTA,RACE 2,O'REG (3),ALLAN FITZGERALD,C,2
LUKE NOLEN,WANGARATTA,RACE 3,ALKAAMEL (1),DAVID & BEN HAYES & TOM DABERNIG,BBB,3
BILLY EGAN,WANGARATTA,RACE 3,CRUNCHIE (4),PATRICK PAYNE,AA,3
CAMPBELL RAWILLER,WANGARATTA,RACE 3,DANCING DUCK (5),RUSSELL OSBORNE,B,3
TEODORE NUGENT,WANGARATTA,RACE 4,DARCY EKCELS (1),RICHARD LAMING,A,4
BRAD RAWILLER,WANGARATTA,RACE 4,LOVE HURTS (3),RICKY MAUND,BBB,4
LUKE NOLEN,WANGARATTA,RACE 4,MESSAGE (4),JOHN MOLONEY,CC,4
JARROD FRY,WANGARATTA,RACE 5,DEFINIA (1),GWENDA JOHNSTONE,B,5
CLAYTON DOUGLAS,WANGARATTA,RACE 5,CHINA AFFAIR (2),JASON WARREN,A,5
DYLAN DUNN,WANGARATTA,RACE 5,AYTON (4),DAVID & BEN HAYES & TOM DABERNIG,BBB,5
TEODORE NUGENT,WANGARATTA,RACE 6,WIND FORCE (3),BEN BRISBOURNE,CCC,6
MADISON LLOYD,WANGARATTA,RACE 6,CARWELKIN (4),MARK THOMAS,CCC,6
ARRON LYNCH,WANGARATTA,RACE 6,DEVIL'S RAIN (5),MARK C. WEBB,B,6
DYLAN DUNN,WANGARATTA,RACE 7,TATUNKA (1),R F DONAT,AAA,7
JACK HILL,WANGARATTA,RACE 7,CAMPOBASSO (2),ROBERT HICKMOTT,AA,7
ARRON LYNCH,WANGARATTA,RACE 7,COONAWARRA (3),MARK C. WEBB,BBB,7
... etc.

注意:ARRON LYNCH在文件2中出现3次。

我已经能够成功地将文件1和文件2都加载到阵列中,以生成文件3(请参见下面的代码)。

文件3:

ARRON LYNCH,WANGARATTA,RACE 1,BILLIEO (1),MARK STEPHENSON,C,1
ARRON LYNCH,WANGARATTA,RACE 6,DEVIL'S RAIN (5),MARK C. WEBB,B,6
ARRON LYNCH,WANGARATTA,RACE 7,COONAWARRA (3),MARK C. WEBB,BBB,7
PATRICK MOLONEY,WANGARATTA,RACE 1,DALLAS COWGIRL (2),BRENT STANLEY,CC,1
PATRICK MOLONEY,WANGARATTA,RACE 5,BEL'S BANNER (5),UDYTA CLARKE,A,5
PATRICK MOLONEY,WANGARATTA,RACE 6,BEAUTY BETTY (7),LEON & TROY CORSTENS,AAA,6
PATRICK MOLONEY,WANGARATTA,RACE 7,GREEN IVY (4),KEN KEYS,CCC,7
JAMIE MOTT,WANGARATTA,RACE 1,FREE FLYING STAR (3),JOHN MCARDLE,BBB,1
JAMIE MOTT,WANGARATTA,RACE 2,INSIDE EDGE (8),JOHN MCARDLE,A,2
JAMIE MOTT,WANGARATTA,RACE 4,BORONDINO DREAM (13E),TRENT BUSUTTIN & NATALIE YOUNG,BB,4
JAMIE MOTT,WANGARATTA,RACE 6,MECKLENBERG COUNTY (11),CINDY ALDERSON,BB,6
MICHELLE PAYNE,WANGARATTA,RACE 1,LA MARSA (4),MICHELLE PAYNE,CCC,1
DANIEL STACKHOUSE,WANGARATTA,RACE 1,LUNARES (5),MATHEW ELLERTON & SIMON ZAHRA,B,1
DANIEL STACKHOUSE,WANGARATTA,RACE 2,BON SHADOW (14),GWENDA JOHNSTONE,BB,2
DANIEL STACKHOUSE,WANGARATTA,RACE 2,SETTLE THE SCORE (18),JOHN & CHRIS LEDGER,B,2
DANIEL STACKHOUSE,WANGARATTA,RACE 4,MRS WHITTEN (10),CINDY ALDERSON,BB,4
... etc.

注意:ARRON LYNCH在文件3中正确出现3次,PATRICK MOLONEY在4次中正确出现,依此类推。

这里是工作代码:

# Input File (File 1: Unique List)
my $unique_jockeys_file = "UNIQUE-LIST-OF-JOCKEYS-RIDING-TODAY.list";
open (INFILE, "<$unique_jockeys_file") or die "Could not open $unique_jockeys_file $!";
foreach(<INFILE>)
{ 
    push @ri_list, $_ unless ($_ eq "\n"); 
} 
close INFILE;

# Input File (File 2: All Jockeys Rides Today)
my $jockey_rides_file = "JOCKEY-RIDES-TODAY.list";
open (INFILE, "<$jockey_rides_file") or die "Could not open $jockey_rides_file $!";
foreach(<INFILE>)
{ 
    push @lin, $_ unless ($_ eq "\n"); 
} 
close INFILE;

# Output File (File 3)
my $jockey_rides_match_file = "JOCKEY-RIDES-TODAY-MATCHED.list";
open (OUTFILE, ">$jockey_rides_match_file");
foreach $ri (@ri_list)
{ 
    chomp $ri; 
    for (@lin) 
    { 
        if ($_ =~ /$ri/ ) 
        { 
            print OUTFILE $_; 
        } 
    } 
} 
close OUTFILE;

我还想为每个名称生成一个单独的文件,其中包含每个名称的匹配记录。例如; 3个匹配的记录为ARRON LYNCH(即ARRONLYNCH.txt),4个匹配的记录为PATRICK MOLONEY(即PATRICKMOLONEY.txt),依此类推。

这是我目前的代码。不幸的是,我看不到为什么它不起作用。

foreach $ri (@ri_list) # Input File (Unique List of Jockeys Riding Today)
{ 
    chomp $ri;
    for (@lin) # Input File (All Jockeys Rides Today)
    { 
        $line = $_;
        chomp($line);

        my ($jockey, $racecourse, $racenum, $hnameandnum, $trainer, $TDRating, $PRO) = split(/,/, $line);

        $printjockey = $jockey;
        $printjockey =~ s/ //g;
        $printjockey =~ s/.-'//g;

        $outfile = "$printjockey.jocknumrides";       

        open (OUTFILE, ">$outfile");

        if ($jockey =~ /$ri/ )
        # if ($jockey eq $ri)
        { 
            print OUTFILE "$jockey, $racecourse, $racenum, $hnameandnum, $trainer, $TDRating, $PRO\n";
            print "$jockey, $racecourse, $racenum, $hnameandnum, $trainer, $TDRating, $PRO\n";
        }
        close OUTFILE;
    } 
} 

任何帮助将不胜感激。

谢谢你。

我有两个文件:文件1包含唯一的名称列表,文件2包含具有附加数据的名称列表。注意:文件2可以具有相同名称的多个记录。例如:文件1:...

arrays file perl unique matching
2个回答
1
投票

请查看以下演示代码是否符合您的要求。


0
投票

这里是一种将名称打印到单独文件中的可能方法,每个骑师一个。

© www.soinside.com 2019 - 2024. All rights reserved.