Отлично, я б лучше средство для всех из них. @HenningMakholm я думаю, что ты ошибаешься, так как 6-месячная въездная виза позволяет посетить / бизнес вести / исследование / временную работу на срок менее 6-Монтс. Не то, что я планирую сделать любой бизнес-это мой праздник, просто поправляю, что я думаю, что это неправильно...но опять же вы, наверное, знаете лучше. Бы будет интересно узнать ваше мнение по этому. Спасибо 'Суд Fi в совершении преступления-это противоречие в терминах. Вы можете предъявить иск в гражданско-правовой материи, или *возбуждено уголовное дело* для commting преступление, которого, как правило, зарезервированы для полиции или прокуратуры. Просьба уточнить ваш ответ.

Perl может сделать это сподручно, используя хэш:

#!/usr/Бен/ОКР на Perl

использовать строгие;
использование предупреждений;

мой %вещество;
мой заголовка @ = сплит ' ', <>;

#прочитать данные в "хлам"
в то время как ( <> ) { 
 мой ( $ключ, $значение ) = раскол; 
 метод push ( @{$материалов${ключ}}, $значение ); 
}

печать присоединиться ("\Т", @заголовок ),"\п"; 
еогеасп мой $Key ( ключи сортировки %вещество ) {
 печатать $ключ, "\Т" присоединиться ";", @{$материалов${ключ}},"\п";
}

Выход:

Б
123 фвв;когда;ГТД;
567 АВС;АВС;
879 ттт;

Где вы пошло не так? Честно говоря, я бы предложил это в попытке сжать все в один лайнер. То есть - на мой взгляд - очень плохая практика. В лучшем случае, это способствует неисповедимы код, который трудно следовать.

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

Для того, чтобы поддерживать несколько столбцов, тогда вы начинаете биться небольшая неприятность с ширины столбцов.

Это работает, но выдает результат, отступы и не аккуратно выравнивается:

#!/usr/Бен/ОКР на Perl

использовать строгие;
использование предупреждений;

мой %вещество; 

мой ( $идентификатора, заголовка@) = сплит ' ', <>;

в то время как ( <> ) { 
 мой ( $ключ, @ценностей ) = раскол; 
 мой %строк;
 @строк {заголовка@} = @ценностей; 
 метод push ( @{$штука{$ключ}{$_}}, $строки{$_} ) для ключей %строк;
}

присоединяйтесь к печати ( "\Т", $ИД @заголовок),"\п";
еогеасп мой $Key ( ключи сортировки %вещество ) {
 присоединяйтесь к печати ("\Т", $ключ, карту { присоединиться ";", @{$штука{$ключ}{$_}}} @заголовок), "\п";
}

Вывод:

А Б В
123 фвв;когда;ПЗС-ггг;ггг;АТТ
Азбука 567;Азбука ГСТ;хагат
879 ттт тыт

Если вкладка разделение не подходит для ваших нужд, вы можете использовать команду выполнить форматирование:

мой $формат = '%12С';
карта печати { функции sprintf($формат $_) } ( $идентификатор, заголовок,@),"\п";
еогеасп мой $Key ( ключи сортировки %вещество ) { 
 карта печати { функции sprintf($формат $_) } ( $ключ, карту { присоединиться ";", @{$штука{$ключ}{$_}}} @заголовок),"\п";
}

Мы делаем некоторые используют карту здесь, который я ценю не совсем очевидная вещь.

Что она делает, это взять список, и применить преобразования к каждому элементу. Так в приведенном выше примере:

печать присоединиться ("\г", на карте { присоединиться ";", @$_ } ([1,2,3],[4,5,6],[7,8,9]) )

Будет генерировать:

1;2;3 4;5;6 7;8;9

На карте операция сказав присоединиться каждый подмассив на ;', а затем вернуться, что в списке... что мы можем тогда присоединиться к вкладке. Это в основном то, что выше делает.