Я уже задавал такой же вопрос 2 недели go, но я имею дело с другим типом файла, и я не могу сделать это: мои данные - список лошадей; каждая строка соответствует лошади с кучей информации. Некоторые лошади стоят на нескольких линиях, потому что они мчались несколько раз. Я хотел бы, для каждой лошади, составить список своих гонщиков и узнать, сколько гонщиков у каждой лошади. Вот ссылка с моими данными: https://docs.google.com/spreadsheets/d/1qNYEtu2HbPj3S2WAPwnFxxRxAQ1rWAkdlcl1rppEcQw/edit?usp=sharing
Я создал код, чтобы сделать это: Первая часть моего кода позволяет мне иметь список гонщиков; но для лошади один и тот же всадник написан несколько раз. Я не могу найти способ иметь дублированный список гонщиков. Кроме того, со второй частью моего кода я не могу получить количество гонщиков, потому что «строка не может быть использована в качестве массива» ...
Есть ли другой способ получить число гонщики? Как удалить имя всадника, уже записанное в списке?
Вот мой код:
open (Endurance_Output, "F: /endurance_output.txt") || d ie "Can не открывать файл! "; my $ k = 1;
while () {
chomp (my $line=$_);
next if 1..$k==$.; #Skip X number of lines
my ($Name, $sex, $date_of_birth, $Sire, $Dam, $Age, $type, $date, $distance, $arrival_time, $time_of_entry, $average_speed, $puls,
$speed_at_gate_30, $speed_at_gate_60, $speed_at_gate_90, $speed_at_gate_120, $average_speed_at_distance_30, $average_speed_at_distance_60,
$average_speed_at_distance_90, $average_speed_at_distance_120, $rank, $all_horses, $temperature, $differences_in_hills, $rider) = split (/\t/, $line);
if ($Name =~ /\w+/){ #BUILD A LIST OF RIDERS NAME
if ($rider =~ /\w+/) {
if (($jockeys_by_horse -> {$Name} -> {Rider}) && ($jockeys_by_horse -> {$Name} -> {Rider} !~ /$rider/)){
$jockeys_by_horse -> {$Name} -> {Rider} .= ",$rider";
} elsif ((!$jockeys_by_horse -> {$Name} -> {Rider})) {
$jockeys_by_horse -> {$Name} -> {Rider} = "$rider";
}
}
}
my $numriders = 0;
my $jockey = "Trainer Not Listed";
if ($jockeys_by_horse -> {$Name}){ #COUNT THE NUMBERS OF RIDERS
$jockey = $jockeys_by_horse -> {$Name} -> {Rider};
my @jockey = split /,/, $jockey;
$numriders = $#$jockey+1; # Count the number of riders with names
}
# Trainer hash - Number of trainers & trainer names
$riderhash -> {$Name} -> {Rider} = "$numriders\t$jockey";
Спасибо за помощь,