2013-05-28 3 views
4

Парни Доброго Дня.Найти все строки в файле, которые совпадают, и напечатать значение после в perl

Я пытаюсь распечатать файл excel в ini-файле, у меня есть сортировка excel и ini, но моя проблема заключается в получении значений без дублирования.

первенствовать файл будет содержать что-то вроде этого

House  |  133_Anderson_str 
    Shop   |  12_Smith_Str 
    Wheelshop |  832_Smith_Str 
    House  |  21_smith_Str 
    Shop   |  1191_dandelion_rd 

Если я делаю Еогеасп и распечатать его ини файл я получить результат, как этот

[House] 
    adress=133_Anderson_str 

    [Shop] 
    adress=12_Smith_Str 

    [Wheelshop] 
    address=832_Smith_Str 

    [House] 
    adress=21_smith_Str 

    [Shop] 
    address=1191_dandelion_rd 

Это не может работать, потому что если Я запускаю gui, который будет искать все адреса под домом, он будет ссылаться только на первый, а затем заканчивается на новой строке. Я хочу напечатать каждое повторяющееся значение один раз, а затем следующее значение после того, как оно должно быть напечатано, как этот

[House] 
    adress=133_Anderson_str, 21_smith_Str 

    [Shop] 
    adress=12_Smith_Str, 1191_dandelion_rd 


    [Wheelshop] 
    address=832_Smith_Str 

Я попробовал есть стол, но я не могу печатать в правильном порядке, и убедитесь, что каждое значение печатается на правильный ключ и не дублирует ключ.

Я использую Config :: Inifiles для печати и чтения ini и SpreadSheet :: Read для получения данных из электронной таблицы.

Надеюсь, кто-то может показать мне свет!

Спасибо, мельница.

ответ

4

Это должно быть @input массив с 5 строк/элементов,

House  |  133_Anderson_str 
Shop   |  12_Smith_Str 
Wheelshop |  832_Smith_Str 
House  |  21_smith_Str 
Shop   |  1191_dandelion_rd 

Во-первых, %hash используется для группировки элементов @input в хеш структуры массивов,

my %hash; 
for my $line (@input) { 

    # $k = "House"; $v ="133_Anderson_str", etc. 
    my ($k, $v) = split/[\s\|]+ /x, $line; 

    my $arr = $hash{$k} ||= []; 
    push @$arr, $v; 
} 

Теперь, когда группировка делается , продолжить с выходом,

for my $k (sort keys %hash) { 

    my $arr = $hash{$k}; 
    my $vals = join ", ", @$arr; 

    print "[$k]\n", "address=$vals\n\n"; 
} 
+0

Черт, это так просто. Бесконечно благодарен!! –