| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Помогите решить задачу с матрицей! |
| Автор: Suppir 14.10.2010, 11:42 |
| Добрый день! Есть следующая матрица в файле File.txt: A B C D Иванов 3 6 6 Петров 5 7 7 Дурнов 2 3 3 3 Кошкин 8 1 1 Верхняя строка представляет собой название АТРИБУТА. Левый столбец обозначает человека. Все данные разделены табами. В начале первой строки тоже стоит таб. Необходимо создать структуру вида: $hash{Иванов}{A}=3 $hash{Иванов}{B}=6 $hash{Иванов}{С}=6 $hash{Иванов}{D}=99 // на пересечении Иванов и D нет никакого значения, в таких случаях присваиваем 99 $hash{Петров}{A}=5 $hash{Петров}{B}=99 $hash{Петров}{С}=7 $hash{Петров}{D}=7 $hash{Дурнов}{A}=2 $hash{Дурнов}{B}=3 $hash{Дурнов}{C}=3 $hash{Дурнов}{D}=3 $hash{Кошкин}{A}=8 $hash{Кошкин}{B}=99 $hash{Кошкин}{C}=1 $hash{Кошкин}{D}=1 Заранее спасибо решившему! |
| Автор: Suppir 14.10.2010, 14:05 | ||
Эту задачу решил следующим кодом:
Добавлено через 33 секунды Только 99 не получилось присваивать с случае с пустым значением. |
| Автор: ming 14.10.2010, 15:53 | ||||
=>
|
| Автор: arto 14.10.2010, 21:12 |
| perl -lne 'if (m#^\s+#) { (undef,@a) = split "\t" } else { my ($n,@b) = split "\t"; my %h; @h{@a} = map { $_ || 99 } @b; $hash{ $n } = \%h; }' |
| Автор: Suppir 16.10.2010, 19:25 |
| arto, можете пояснить, как работает @h{@a} и $hash{ $n } = \%h ? |
| Автор: arto 17.10.2010, 17:23 |
| 1. perldoc perldata на предмет slice 2. perldoc perlref |
| Автор: ElectricalStorm 26.10.2010, 17:34 | ||
что бы понять что пишет arto надо уметь пользоваться http://perldoc.perl.org/B/Deparse.html, хотя может и не помочь |
| Автор: tishaishii 27.10.2010, 22:56 | ||
|
| Автор: Sugar84 28.10.2010, 16:30 | ||||
В случае нуля на 99 заменится же, разве не? |
| Автор: ming 28.10.2010, 19:27 | ||
Верно, заменится. Тогда, если значение '0' или 0 допустимо, то
|
| Автор: tishaishii 29.10.2010, 22:42 |
| Замечательно. |