我有兩個文件來自兩個不同的服務器。在這兩個文件中提供了一些橄欖球隊的比賽。如你所知,橄欖球隊可以用不同的名字命名。 我想實現一個代碼,可以在兩個文件中識別相同的足球比賽,以便從文件中獲取相同的變量,而從另一個文件中獲取其他變量。 例如在一個文件中,我有一個叫做比賽模式識別和字符串匹配
Derry City - Bray Wanderers
,並在其他文件中我有一個叫做
Derry City - Bray
我怎麼能做到這一點同樣的比賽? 我沒有想法。
我有兩個文件來自兩個不同的服務器。在這兩個文件中提供了一些橄欖球隊的比賽。如你所知,橄欖球隊可以用不同的名字命名。 我想實現一個代碼,可以在兩個文件中識別相同的足球比賽,以便從文件中獲取相同的變量,而從另一個文件中獲取其他變量。 例如在一個文件中,我有一個叫做比賽模式識別和字符串匹配
Derry City - Bray Wanderers
,並在其他文件中我有一個叫做
Derry City - Bray
我怎麼能做到這一點同樣的比賽? 我沒有想法。
非常簡單的腳本來替換團隊的別名。你需要自己填寫別名,我做了一些。如果你有多個遊戲,只要所有的別名交換完整的名字,哈希將覆蓋現有的遊戲。
#!/usr/bin/perl
use strict;
use warnings;
my %games;
while (<DATA>) {
chomp;
my ($home, $guest) = split /\s*-\s*/, $_, 2;
$home = get_name($home);
$guest = get_name($guest);
$games{"$home - $guest"} = 1;
}
sub get_name {
# Return the full name for the team, if it exists, otherwise return the original
my %alias = (
'Derry' => 'Derry City',
'Brawlers' => 'Beijing',
'Dolphins' => 'Miami',
'Bray' => 'Bray Wanderers',
);
return $alias{$_[0]} // $_[0];
}
use Data::Dumper;
print Dumper \%games;
__DATA__
Derry City - Bray Wanderers
Derry City - Bray
Brawlers - Dolphins
Beijing - Miami
Miami - Beijing
在C++中:看看Boost.Regex和Boost.Tokenizer,因爲他們會做你所需要的。所有你需要的是一種模式來匹配。
boost::regex("Bray[\s]*(Wanderers)?", boost::regex::icase);
或類似的東西 - 容易設置爲一組單元測試。
說真的,**沒有**的想法呢?甚至不完整,或錯誤或天真的? –
唯一天真的想法是用搜索解析一個文件並用sed或perl替換子例程。但是對於每個新的團隊,我都必須手動修復文件。 – emanuele