0
Я многострочные записями в текстовом файле, я хотел бы DeDupe с помощью Perl:DeDup многоканальных записей с Perl
отчетов разграничены «# конца-записи» строки и выглядеть следующим образом:
CAPTAIN GIBLET'S NEWT CORRAL 555 RANDOM ST TARDIS, CT 99999 We regret to inform you that we must repossess your pants in part due to your being 6 months late on payments. But mostly it's maliciousness. :) TOTAL DUE: $30.00 #end-of-record
Вот моя первая попытка:
#!/usr/bin/perl -w
use strict;
{
local $/ = "#end-of-record";
my %seen;
while (my $record = <>) {
if (not exists $seen{$record}) {
print $record;
$seen{$record} = 1;
}
}
}
Это печать каждую запись ... и дублирующих записей. Где я неправ?
UPDATE
Над кодом, кажется, работает.
Это один из способов сделать это. Вам понадобится '$ seen {$ record} = 1;' в вашем 'if' сообщении. Кроме того, вам может понадобиться выполнить некоторую обработку, например, перемещение ведущего и заднего пробелов. Помните, что вы существенно соответствуете каждому символу записи для символа, поэтому пробел будет влиять на просмотр записи или нет. – chilemagic
Вы никогда не устанавливаете запись в хеш, а проверяете ее существование. Поэтому он всегда возвращает false и печатает запись. – xtreak
Я добавил предложенный код, но он все еще печатает все записи ... и дублирует. – Bubnoff