Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何从一个数组中提取数据,该数组在Perl中只包含元素的一次出现和对应元素的一次出现_Arrays_Perl_Hash_Unique_Combinations - Fatal编程技术网

Arrays 如何从一个数组中提取数据,该数组在Perl中只包含元素的一次出现和对应元素的一次出现

Arrays 如何从一个数组中提取数据,该数组在Perl中只包含元素的一次出现和对应元素的一次出现,arrays,perl,hash,unique,combinations,Arrays,Perl,Hash,Unique,Combinations,我正试图找出如何从一个只包含一个教练和一个骑师的文件中提取记录 基本上,记录意味着骑师一天只有一次骑行,而教练X一天只有一名跑步者 以下是一些示例数据: ALLAN DENHAM,MUSWELLBROOK,RACE 5,MOPITTS (10),JEFF PENZA,B,5 ALLAN KEHOE,MUSWELLBROOK,RACE 3,FOXY FIVE (5),KOBY JENNINGS,C,3 ALLAN KEHOE,MUSWELLBROOK,RACE 4,BANGALLEY LAD (3

我正试图找出如何从一个只包含一个教练和一个骑师的文件中提取记录

基本上,记录意味着骑师一天只有一次骑行,而教练X一天只有一名跑步者

以下是一些示例数据:

ALLAN DENHAM,MUSWELLBROOK,RACE 5,MOPITTS (10),JEFF PENZA,B,5
ALLAN KEHOE,MUSWELLBROOK,RACE 3,FOXY FIVE (5),KOBY JENNINGS,C,3
ALLAN KEHOE,MUSWELLBROOK,RACE 4,BANGALLEY LAD (3),KOBY JENNINGS,BBB,4
ANDREW ROBINSON,MUSWELLBROOK,RACE 6,TROPHIES GALORE (4),DARRYL MCLELLAN,AAA,6
BEN HILL,MUSWELLBROOK,RACE 4,WHALER BILL (10),GRANT BUCKLEY,BB,4
BEN HILL,MUSWELLBROOK,RACE 5,MR BILL (5),GRANT BUCKLEY,BB,4
BJORN BAKER,MUSWELLBROOK,RACE 3,MISS JAY FOX (9),ALYSHA COLLETT,BB,3
BRETT CAVANOUGH,MUSWELLBROOK,RACE 3,OFFICE AFFAIR (10),RACHAEL MURRAY,B,3
BRETT THOMPSON,MUSWELLBROOK,RACE 7,COSTAS (2),RONALD SIMPSON,BB,7
CODY MORGAN,MUSWELLBROOK,RACE 6,BAJAN GOLD (5),JEFF PENZA,BB,6
CODY MORGAN,MUSWELLBROOK,RACE 7,RAPID EAGLE (9),DARRYL MCLELLAN,B,7
在示例数据中,符合我的标准的第一条记录如下:

BJORN BAKER,MUSWELLBROOK,RACE 3,MISS JAY FOX (9),ALYSHA COLLETT,BB,3
注:比约恩·贝克只出现一次,阿莉莎·科莱特只出现一次

BRETT THOMPSON,MUSWELLBROOK,RACE 7,COSTAS (2),RONALD SIMPSON,BB,7
在样本数据中,培训师ALLAN DENHAM一天只有一名跑步者,但骑师JEFF PENZA有两次骑乘,一次给培训师ALLAN DENHAM,一次给培训师CODY MORGAN,因此这不符合我的标准

另一个符合我的标准的记录是以下记录:

BRETT CAVANOUGH,MUSWELLBROOK,RACE 3,OFFICE AFFAIR (10),RACHAEL MURRAY,B,3
注意:BRETT CAVANOUGH只出现一次,RACHAEL MURRAY只出现一次

BRETT THOMPSON,MUSWELLBROOK,RACE 7,COSTAS (2),RONALD SIMPSON,BB,7
注:布雷特·汤普森只出现一次,罗纳德·辛普森只出现一次

BRETT THOMPSON,MUSWELLBROOK,RACE 7,COSTAS (2),RONALD SIMPSON,BB,7
等等

我已经用Perl将页面顶部的示例数据加载到一个数组中,并研究了如何使用哈希等来提取唯一记录,但我无法根据两个元素组合的唯一性来提取所需记录,即一个培训师+一个对应的骑师

use Data::Dumper;

$infile = "TRAINER-JOCKEY-SAMPLE.txt";

open my $infile, "<:encoding(utf8)", $infile or die "$infile: $!";
my @recs = <$infile>;
close $infile;

my %uniques;
for my $rec (@recs) 
{
    my ($trainer, $racecourse, $racenum, $hnameandnum, $jockey, $TDRating, $rnum) = split(",", $rec);
    ++$uniques{$trainer}{$jockey};
}

print Dumper(\%uniques);

for my $trainer (sort keys %uniques) 
{
    my $answer = join ',', sort keys %{ $uniques{$trainer} };
    print "$trainer has unique values $answer\n";
}

非常感谢您的帮助。

除非输入有重复的行,否则培训师和骑师只需在列表中出现一次

那么,让我们来计算一下培训师的出现次数。为了能够将它们与骑师匹配,我们将以散列形式将骑师存储到培训师

一旦我们建立了这两个结构,只需选择只有一个相关培训师的骑师,并检查培训师是否只出现一次,而这必须与他们相关的骑师一起出现

!/usr/bin/perl 使用警告; 严格使用; 使用特征qw{say}; 我的%骑师,%教练; 当{ 我的$jockey,$trainer=split/,/[0,4]; ++$trainer{$trainer}; undef$骑师{$骑师}{$培训师}; } 为我的$jockeys%骑师{ 接下来如果1 !/usr/bin/perl 使用警告; 严格使用; 我的%骑师、%教练、%满员; 当{ 我的$jockey,$trainer=split/,/[0,4]; ++$trainer{$trainer}; undef$骑师{$骑师}{$培训师}; $full{$jockey}=$\; } 为我的$jockeys%骑师{ 接下来如果1培训师和骑师必须在列表中只出现一次,除非输入有重复的行

那么,让我们来计算一下培训师的出现次数。为了能够将它们与骑师匹配,我们将以散列形式将骑师存储到培训师

一旦我们建立了这两个结构,只需选择只有一个相关培训师的骑师,并检查培训师是否只出现一次,而这必须与他们相关的骑师一起出现

!/usr/bin/perl 使用警告; 严格使用; 使用特征qw{say}; 我的%骑师,%教练; 当{ 我的$jockey,$trainer=split/,/[0,4]; ++$trainer{$trainer}; undef$骑师{$骑师}{$培训师}; } 为我的$jockeys%骑师{ 接下来如果1 !/usr/bin/perl 使用警告; 严格使用; 我的%骑师、%教练、%满员; 当{ 我的$jockey,$trainer=split/,/[0,4]; ++$trainer{$trainer}; undef$骑师{$骑师}{$培训师}; $full{$jockey}=$\; } 为我的$jockeys%骑师{ 接下来如果1这很有效。非常感谢,@choroba,再问一个问题,我在哪里/如何打印每个匹配的骑师和助理教练的剩余记录,即$racecourse、$racenum、$hnameandnum、$TDRating?太棒了。我觉得这是必须的,但我只是不知道怎么做。再次感谢您的帮助,@choroba非常感谢。这非常有效。非常感谢,@choroba还有一个问题,我应该在哪里/如何打印与我匹配的每个骑师和助理教练的剩余记录。
e$赛马场,$racenum,$hnameandnum,$TDRating?太棒了。我觉得这是必须的,但我只是不知道怎么做。再次感谢您的帮助,@choroba非常感谢。