Perl - усечение, где значения перекрываются и объединяются - PullRequest
0 голосов
/ 17 июня 2019

Я новичок в языке Perl и пытаюсь преобразовать некоторые данные из базы данных MYSQL.

Я работаю над извлечением адресов из двух разных таблиц, и моя цель - объединить «полный» адрес. В некоторых случаях адреса фрагментированы между столбцами из каждой таблицы.

Например:

╔═══╦═════════════════════╦══════════════════════╗
║   ║ a.address_1         ║ b.address_2          ║
╠═══╬═════════════════════╬══════════════════════╣
║ 1 ║ 6418 Main St        ║ Main St, Detroit MI  ║
║ 2 ║ 11 S Pole Rd        ║ Miami, FL 33166      ║
║ 3 ║ Pittsburgh, PA 15222║ Third Ave, Pittsburgh║
╚═══╩═════════════════════╩══════════════════════╝

Мне нужно проверить, совпадает ли какая-либо часть адреса, и если это так, обрезать перекрытие и объединить оставшийся адрес

╔═══╦══════════════════════════════════════╗
║   ║ address                              ║
╠═══╬══════════════════════════════════════╣
║ 1 ║ 6418 Main St, Detroit MI             ║
║ 2 ║ 11 S Pole Rd Miami, FL 33166         ║
║ 3 ║ Fifth Avenue, Pittsburgh, PA 15222   ║
╚═══╩══════════════════════════════════════╝

На данный момент я извлекаю два адреса и сохраняю их, но теперь мне нужно преобразовать их в один «полный» адрес.

Может кто-нибудь помочь мне с решением?

Спасибо

1 Ответ

0 голосов
/ 17 июня 2019

Можно начать с регулярного выражения, которое разбивает каждое слово первого ввода данных (a.address_1) на массив:

my ($addr_1, $addr_2) = $sth->fetchrow_array();
my @words = ($addr_1 =~ /(.*?)\s+/g);

После этого вы можете перебирать каждое слово и удалять его.со второго адреса

for my $word (@words) {
    $addr_2 =~ s/$word//g;
}

Когда вы закончите с этим, вы можете объединить две строки в одну:

my $concatenated_string = $addr_1 . $addr_2;

И после того, как вы это сделаете, вы должны быть оченьблизко к тому, что вы спрашивали.

ПРИМЕЧАНИЕ: синтаксические ошибки могут быть возможны, я написал это на макушке.

...